├── .editorconfig ├── .gitignore ├── README.md ├── config.xml ├── ionic.config.json ├── ionic.starter.json ├── package-lock.json ├── package.json ├── resources ├── README.md ├── android │ ├── icon │ │ ├── drawable-hdpi-icon.png │ │ ├── drawable-ldpi-icon.png │ │ ├── drawable-mdpi-icon.png │ │ ├── drawable-xhdpi-icon.png │ │ ├── drawable-xxhdpi-icon.png │ │ └── drawable-xxxhdpi-icon.png │ ├── splash │ │ ├── drawable-land-hdpi-screen.png │ │ ├── drawable-land-ldpi-screen.png │ │ ├── drawable-land-mdpi-screen.png │ │ ├── drawable-land-xhdpi-screen.png │ │ ├── drawable-land-xxhdpi-screen.png │ │ ├── drawable-land-xxxhdpi-screen.png │ │ ├── drawable-port-hdpi-screen.png │ │ ├── drawable-port-ldpi-screen.png │ │ ├── drawable-port-mdpi-screen.png │ │ ├── drawable-port-xhdpi-screen.png │ │ ├── drawable-port-xxhdpi-screen.png │ │ └── drawable-port-xxxhdpi-screen.png │ └── xml │ │ └── network_security_config.xml ├── icon.png ├── ios │ ├── icon │ │ ├── icon-1024.png │ │ ├── icon-20.png │ │ ├── icon-20@2x.png │ │ ├── icon-20@3x.png │ │ ├── icon-24@2x.png │ │ ├── icon-27.5@2x.png │ │ ├── icon-29.png │ │ ├── icon-29@2x.png │ │ ├── icon-29@3x.png │ │ ├── icon-40.png │ │ ├── icon-40@2x.png │ │ ├── icon-40@3x.png │ │ ├── icon-44@2x.png │ │ ├── icon-50.png │ │ ├── icon-50@2x.png │ │ ├── icon-60.png │ │ ├── icon-60@2x.png │ │ ├── icon-60@3x.png │ │ ├── icon-72.png │ │ ├── icon-72@2x.png │ │ ├── icon-76.png │ │ ├── icon-76@2x.png │ │ ├── icon-83.5@2x.png │ │ ├── icon-86@2x.png │ │ ├── icon-98@2x.png │ │ ├── icon-small.png │ │ ├── icon-small@2x.png │ │ ├── icon-small@3x.png │ │ ├── icon.png │ │ └── icon@2x.png │ └── splash │ │ ├── Default-2436h.png │ │ ├── Default-568h@2x~iphone.png │ │ ├── Default-667h.png │ │ ├── Default-736h.png │ │ ├── Default-Landscape-2436h.png │ │ ├── Default-Landscape-736h.png │ │ ├── Default-Landscape@2x~ipad.png │ │ ├── Default-Landscape@~ipadpro.png │ │ ├── Default-Landscape~ipad.png │ │ ├── Default-Portrait@2x~ipad.png │ │ ├── Default-Portrait@~ipadpro.png │ │ ├── Default-Portrait~ipad.png │ │ ├── Default@2x~iphone.png │ │ ├── Default@2x~universal~anyany.png │ │ └── Default~iphone.png └── splash.png ├── screenshots ├── 1.PNG ├── 2.PNG ├── 3.PNG ├── 4.PNG ├── 5.PNG ├── 6.PNG ├── 7.PNG ├── 8.PNG └── 9.PNG ├── sharpconsult.zip ├── src ├── app │ ├── app.component.ts │ ├── app.html │ ├── app.module.ts │ ├── app.scss │ └── main.ts ├── assets │ ├── _readme_license.txt │ ├── icon │ │ ├── favicon.ico │ │ ├── icon.png │ │ └── user.jpg │ └── imgs │ │ ├── bg1.jpg │ │ ├── icon.png │ │ └── logo.png ├── index.html ├── manifest.json ├── pages │ ├── add-employee │ │ ├── add-employee.html │ │ ├── add-employee.module.ts │ │ ├── add-employee.scss │ │ └── add-employee.ts │ ├── employees │ │ ├── employees.html │ │ ├── employees.module.ts │ │ ├── employees.scss │ │ └── employees.ts │ ├── home │ │ ├── home.html │ │ ├── home.module.ts │ │ ├── home.scss │ │ └── home.ts │ ├── login │ │ ├── login.html │ │ ├── login.module.ts │ │ ├── login.scss │ │ └── login.ts │ ├── manager │ │ ├── manager.html │ │ ├── manager.module.ts │ │ ├── manager.scss │ │ └── manager.ts │ ├── map │ │ ├── map.html │ │ ├── map.module.ts │ │ ├── map.scss │ │ └── map.ts │ ├── my-schedules │ │ ├── my-schedules.html │ │ ├── my-schedules.module.ts │ │ ├── my-schedules.scss │ │ └── my-schedules.ts │ ├── schedules │ │ ├── schedules.html │ │ ├── schedules.module.ts │ │ ├── schedules.scss │ │ └── schedules.ts │ ├── settings │ │ ├── settings.html │ │ ├── settings.module.ts │ │ ├── settings.scss │ │ └── settings.ts │ └── tracking │ │ ├── tracking.html │ │ ├── tracking.module.ts │ │ ├── tracking.scss │ │ └── tracking.ts ├── pipes │ ├── pipes.module.ts │ └── relative-time │ │ └── relative-time.ts ├── providers │ ├── global │ │ └── global.ts │ └── my-service │ │ └── my-service.ts ├── service-worker.js └── theme │ └── variables.scss ├── tsconfig.json └── tslint.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | 10 | # We recommend you to keep these unchanged 11 | end_of_line = lf 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [*.md] 17 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | *~ 5 | *.sw[mnpcod] 6 | *.log 7 | *.tmp 8 | *.tmp.* 9 | log.txt 10 | *.sublime-project 11 | *.sublime-workspace 12 | .vscode/ 13 | npm-debug.log* 14 | 15 | .idea/ 16 | .ionic/ 17 | .sourcemaps/ 18 | .sass-cache/ 19 | .tmp/ 20 | .versions/ 21 | coverage/ 22 | dist/ 23 | node_modules/ 24 | tmp/ 25 | temp/ 26 | platforms/ 27 | plugins/ 28 | plugins/android.json 29 | plugins/ios.json 30 | www/ 31 | $RECYCLE.BIN/ 32 | 33 | .DS_Store 34 | Thumbs.db 35 | UserInterfaceState.xcuserstate 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ParlyConnect 2 | ParlyConnect is a civic technology that promotes Government to Citizen Interaction to increase accountability and transparency. The app allows citizens and members of parliament to communicate and share opinions. Citizens can view and vote in support or against Bills. Citizens can also petition the government through digital signatures. MPs can view how their constituents feel about a certain topic through votes and chats. 3 | 4 | ##Objectives 5 | 1. to track geographical locations of each employee on duty 6 | 2. to calculate hours put in by each employee for calculation of wages 7 | 8 | ## Screenshots 9 | ![](screenshots/1.PNG) 10 | ![](screenshots/2.PNG) 11 | ![](screenshots/3.PNG) 12 | ![](screenshots/4.PNG) 13 | ![](screenshots/5.PNG) 14 | ![](screenshots/6.PNG) 15 | ![](screenshots/7.PNG) 16 | ![](screenshots/8.PNG) 17 | ![](screenshots/9.PNG) 18 | 19 | ## Installations 20 | ### Prerequisites 21 | 1. PHP Server 7+ 22 | 2. MySQL database server 23 | 3. NodeJS 24 | 4. Android SDKs 25 | 26 | ### Stages 27 | 1. npm i -g ionic 28 | 2. npm i -g cordova 29 | 3. Open project folder via console and run 30 | npm i 31 | 4. extract the server_side_api.zip and add to web root 32 | 5. create database named hackathorn and import sharpconsult.sql 33 | 6. in project path run 34 | ionic serve 35 | 7. when the login screen appears, slide from left to right and configure server ip e.g http://localhost/sharpconsult/ 36 | -------------------------------------------------------------------------------- /config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sharp Consult 4 | An awesome Ionic/Cordova app. 5 | Victor Chinyavada 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /ionic.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SharpConsult", 3 | "integrations": { 4 | "cordova": {} 5 | }, 6 | "type": "ionic-angular" 7 | } 8 | -------------------------------------------------------------------------------- /ionic.starter.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Blank Starter", 3 | "baseref": "master", 4 | "tarignore": [ 5 | ".sourcemaps", 6 | "node_modules", 7 | "package-lock.json", 8 | "www" 9 | ], 10 | "scripts": { 11 | "test": "npm run build" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SharpConsult", 3 | "version": "0.0.1", 4 | "author": "Victor Chinyavada", 5 | "homepage": "http://ionicframework.com/", 6 | "private": true, 7 | "scripts": { 8 | "start": "ionic-app-scripts serve", 9 | "clean": "ionic-app-scripts clean", 10 | "build": "ionic-app-scripts build", 11 | "lint": "ionic-app-scripts lint" 12 | }, 13 | "dependencies": { 14 | "@angular/animations": "5.2.11", 15 | "@angular/common": "5.2.11", 16 | "@angular/compiler": "5.2.11", 17 | "@angular/compiler-cli": "5.2.11", 18 | "@angular/core": "5.2.11", 19 | "@angular/forms": "5.2.11", 20 | "@angular/http": "5.2.11", 21 | "@angular/platform-browser": "5.2.11", 22 | "@angular/platform-browser-dynamic": "5.2.11", 23 | "@ionic-native/core": "~4.11.0", 24 | "@ionic-native/geolocation": "^4.20.0", 25 | "@ionic-native/gyroscope": "^4.20.0", 26 | "@ionic-native/local-notifications": "^4.12.2", 27 | "@ionic-native/splash-screen": "~4.11.0", 28 | "@ionic-native/status-bar": "~4.11.0", 29 | "@ionic/pro": "2.0.3", 30 | "@ionic/storage": "2.1.3", 31 | "cordova-android": "^8.0.0", 32 | "cordova-browser": "^6.0.0", 33 | "cordova-plugin-badge": "^0.8.7", 34 | "cordova-plugin-device": "^2.0.2", 35 | "cordova-plugin-geolocation": "^4.0.1", 36 | "cordova-plugin-ionic-keyboard": "^2.1.2", 37 | "cordova-plugin-local-notification": "^0.9.0-beta.2", 38 | "cordova-plugin-splashscreen": "^5.0.2", 39 | "cordova-plugin-whitelist": "^1.3.3", 40 | "date-fns": "^1.29.0", 41 | "ionic-angular": "3.9.2", 42 | "ionicons": "3.0.0", 43 | "run": "1.4.0", 44 | "rxjs": "5.5.11", 45 | "sw-toolbox": "3.6.0", 46 | "zone.js": "0.8.26" 47 | }, 48 | "devDependencies": { 49 | "@ionic/app-scripts": "3.1.11", 50 | "cordova-plugin-statusbar": "^2.4.2", 51 | "typescript": "~2.6.2" 52 | }, 53 | "description": "An Ionic project", 54 | "cordova": { 55 | "plugins": { 56 | "cordova-plugin-geolocation": { 57 | "GEOLOCATION_USAGE_DESCRIPTION": "To locate you" 58 | }, 59 | "cordova-plugin-whitelist": {}, 60 | "cordova-plugin-device": {}, 61 | "cordova-plugin-splashscreen": {}, 62 | "cordova-plugin-ionic-keyboard": {}, 63 | "cordova-plugin-local-notification": {}, 64 | "cordova-plugin-statusbar": {} 65 | }, 66 | "platforms": [ 67 | "browser", 68 | "android" 69 | ] 70 | } 71 | } -------------------------------------------------------------------------------- /resources/README.md: -------------------------------------------------------------------------------- 1 | These are Cordova resources. You can replace icon.png and splash.png and run 2 | `ionic cordova resources` to generate custom icons and splash screens for your 3 | app. See `ionic cordova resources --help` for details. 4 | 5 | Cordova reference documentation: 6 | 7 | - Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html 8 | - Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/ 9 | -------------------------------------------------------------------------------- /resources/android/icon/drawable-hdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/icon/drawable-hdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-ldpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/icon/drawable-ldpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-mdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/icon/drawable-mdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/icon/drawable-xhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/icon/drawable-xxhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xxxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/icon/drawable-xxxhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-land-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-land-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-land-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-land-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-land-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-land-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-port-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-port-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-port-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-port-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-port-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/android/splash/drawable-port-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | localhost 5 | 6 | 7 | -------------------------------------------------------------------------------- /resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/icon.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-1024.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-20.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-20@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-20@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-24@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-24@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-27.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-27.5@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-29.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-29@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-29@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-40.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-40@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-40@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-44@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-44@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-50.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-50@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-60.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-60@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-60@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-72.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-72@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-76.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-76@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-83.5@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-86@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-86@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-98@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-98@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-small.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-small@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon-small@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon.png -------------------------------------------------------------------------------- /resources/ios/icon/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/icon/icon@2x.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-2436h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-2436h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-568h@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-568h@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-667h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-667h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-2436h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-Landscape-2436h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-Landscape-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-Landscape@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-Landscape@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-Landscape~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-Portrait@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-Portrait@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~universal~anyany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default@2x~universal~anyany.png -------------------------------------------------------------------------------- /resources/ios/splash/Default~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/ios/splash/Default~iphone.png -------------------------------------------------------------------------------- /resources/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/resources/splash.png -------------------------------------------------------------------------------- /screenshots/1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/1.PNG -------------------------------------------------------------------------------- /screenshots/2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/2.PNG -------------------------------------------------------------------------------- /screenshots/3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/3.PNG -------------------------------------------------------------------------------- /screenshots/4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/4.PNG -------------------------------------------------------------------------------- /screenshots/5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/5.PNG -------------------------------------------------------------------------------- /screenshots/6.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/6.PNG -------------------------------------------------------------------------------- /screenshots/7.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/7.PNG -------------------------------------------------------------------------------- /screenshots/8.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/8.PNG -------------------------------------------------------------------------------- /screenshots/9.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/screenshots/9.PNG -------------------------------------------------------------------------------- /sharpconsult.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/sharpconsult.zip -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ViewChild } from '@angular/core'; 2 | import { Platform, Nav, MenuController, ToastController } from 'ionic-angular'; 3 | import { StatusBar } from '@ionic-native/status-bar'; 4 | import { SplashScreen } from '@ionic-native/splash-screen'; 5 | import { Storage } from '@ionic/storage'; 6 | 7 | import { GlobalProvider } from "../providers/global/global"; 8 | 9 | import { HomePage } from '../pages/home/home'; 10 | import { LoginPage } from '../pages/login/login'; 11 | import { MapPage } from '../pages/map/map'; 12 | import { MySchedulesPage } from '../pages/my-schedules/my-schedules'; 13 | import { SettingsPage } from '../pages/settings/settings'; 14 | import { ManagerPage } from '../pages/manager/manager'; 15 | 16 | @Component({ 17 | templateUrl: 'app.html' 18 | }) 19 | export class MyApp { 20 | @ViewChild(Nav) navCtrl; 21 | rootPage:any; 22 | constructor(public toastCtrl: ToastController, public global: GlobalProvider,public platform: Platform,public statusBar: StatusBar, splashScreen: SplashScreen, public menuCtrl: MenuController, public storage: Storage) { 23 | this.initializeApp(); 24 | statusBar.styleDefault(); 25 | splashScreen.hide(); 26 | } 27 | 28 | 29 | initializeApp(){ 30 | this.platform.ready().then(() => { 31 | this.storage.ready().then(()=> { 32 | this.storage.get('serverAddress').then((val) =>{ 33 | this.setServerAddress(val); 34 | }); 35 | this.storage.get('session').then((val) =>{ 36 | this.setAccount(val); 37 | }); 38 | }); 39 | }); 40 | } 41 | 42 | setAccount(val){ 43 | this.global.session=val; 44 | if(this.global.session==null){ 45 | this.rootPage = LoginPage; 46 | this.global.session=null; 47 | }else{ 48 | this.rootPage = HomePage; 49 | } 50 | } 51 | 52 | setServerAddress(val){ 53 | if(val!=null){ 54 | this.global.serverAddress=val; 55 | }else{ 56 | this.global.serverAddress="http://sharpconsult.000webhostapp.com/"; 57 | } 58 | } 59 | 60 | openPage(index){ 61 | var pages=[MySchedulesPage,MapPage,SettingsPage,ManagerPage]; 62 | this.navCtrl.push(pages[index]); 63 | } 64 | 65 | logout(){ 66 | this.storage.remove("session"); 67 | this.global.session=null; 68 | this.navCtrl.setRoot(LoginPage); 69 | } 70 | 71 | } 72 | 73 | -------------------------------------------------------------------------------- /src/app/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
SharpConsult
Engr (Pvt) Ltd
11 |
12 |
13 |
14 |
15 |
16 | 17 | 18 | 19 | 21 | 23 | 25 | 27 | Account 28 | 29 | 30 |

{{ global.session.fldforename }} {{ global.session.fldsurname }}

31 |
32 |

{{ global.session.fldphone_no }}

33 |
34 | 36 | 38 |
39 | 40 | 42 | 43 |
44 | 45 | 46 | SharpConsult Engineering (Pvt) Ltd
App v.1.0.2 47 |
48 |
49 |
50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { ErrorHandler, NgModule } from '@angular/core'; 3 | import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular'; 4 | import { SplashScreen } from '@ionic-native/splash-screen'; 5 | import { StatusBar } from '@ionic-native/status-bar'; 6 | import { Geolocation } from '@ionic-native/geolocation'; 7 | import { IonicStorageModule } from '@ionic/storage'; 8 | import { HttpModule } from '@angular/http'; 9 | 10 | import { MyApp } from './app.component'; 11 | import { HomePage } from '../pages/home/home'; 12 | import { LoginPage } from '../pages/login/login'; 13 | import { MapPage } from '../pages/map/map'; 14 | import { SchedulesPage } from '../pages/schedules/schedules'; 15 | import { MySchedulesPage } from '../pages/my-schedules/my-schedules'; 16 | import { SettingsPage } from '../pages/settings/settings'; 17 | import { ManagerPage } from '../pages/manager/manager'; 18 | import { TrackingPage } from '../pages/tracking/tracking'; 19 | import { EmployeesPage } from '../pages/employees/employees'; 20 | import { AddEmployeePage } from '../pages/add-employee/add-employee'; 21 | 22 | import { GlobalProvider } from '../providers/global/global'; 23 | import { RelativeTimePipe } from '../pipes/relative-time/relative-time'; 24 | import { MyServiceProvider } from '../providers/my-service/my-service'; 25 | 26 | 27 | @NgModule({ 28 | declarations: [ 29 | MyApp, 30 | HomePage, 31 | LoginPage, 32 | MapPage, 33 | RelativeTimePipe, 34 | SchedulesPage, 35 | SettingsPage, 36 | ManagerPage, 37 | TrackingPage, 38 | EmployeesPage, 39 | MySchedulesPage, 40 | AddEmployeePage 41 | ], 42 | imports: [ 43 | BrowserModule, 44 | IonicModule.forRoot(MyApp), 45 | IonicStorageModule.forRoot(), 46 | HttpModule 47 | ], 48 | bootstrap: [IonicApp], 49 | entryComponents: [ 50 | MyApp, 51 | HomePage, 52 | LoginPage, 53 | MapPage, 54 | SchedulesPage, 55 | SettingsPage, 56 | ManagerPage, 57 | TrackingPage, 58 | EmployeesPage, 59 | MySchedulesPage, 60 | AddEmployeePage 61 | ], 62 | providers: [ 63 | StatusBar, 64 | SplashScreen, 65 | {provide: ErrorHandler, useClass: IonicErrorHandler}, 66 | Geolocation, 67 | GlobalProvider, 68 | MyServiceProvider, 69 | ] 70 | }) 71 | export class AppModule {} 72 | -------------------------------------------------------------------------------- /src/app/app.scss: -------------------------------------------------------------------------------- 1 | // http://ionicframework.com/docs/theming/ 2 | 3 | 4 | // App Global Sass 5 | // -------------------------------------------------- 6 | // Put style rules here that you want to apply globally. These 7 | // styles are for the entire app and not just one component. 8 | // Additionally, this file can be also used as an entry point 9 | // to import other Sass files to be included in the output CSS. 10 | // 11 | // Shared Sass variables, which can be used to adjust Ionic's 12 | // default Sass variables, belong in "theme/variables.scss". 13 | // 14 | // To declare rules for a specific mode, create a child rule 15 | // for the .md, .ios, or .wp mode classes. The mode class is 16 | // automatically applied to the element in the app. 17 | -------------------------------------------------------------------------------- /src/app/main.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | 3 | import { AppModule } from './app.module'; 4 | 5 | platformBrowserDynamic().bootstrapModule(AppModule); 6 | -------------------------------------------------------------------------------- /src/assets/_readme_license.txt: -------------------------------------------------------------------------------- 1 | The project "Map Icons Collection" was created by Nicolas Mollet under the Creative Commons Attribution-Share Alike 3.0 Unported license (CC BY SA 3.0 - http://creativecommons.org/licenses/by-sa/3.0/). 2 | 3 | This license lets you remix, tweak, and build upon our work even for commercial reasons, as long as you credit the project and license your new creations under the identical terms. 4 | 5 | Please credit: Maps Icons Collection https://mapicons.mapsmarker.com 6 | Logo available at https://mapicons.mapsmarker.com/wp-content/uploads/2011/03/miclogo-88x31.gif 7 | 8 | Some icons are derived from the project SJJB Map Icons (http://www.sjjb.co.uk/mapicons/) by SJJB Management (http://www.sjjb.co.uk/), licensed under Creative Commons Public Domain Dedication (http://creativecommons.org/licenses/publicdomain/). 9 | 10 | Some icons are derived from the project User Interface Design Framework (http://www.webalys.com/design-interface-application-framework.php) by Webalys (http://www.webalys.com/). -------------------------------------------------------------------------------- /src/assets/icon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/src/assets/icon/favicon.ico -------------------------------------------------------------------------------- /src/assets/icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/src/assets/icon/icon.png -------------------------------------------------------------------------------- /src/assets/icon/user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/src/assets/icon/user.jpg -------------------------------------------------------------------------------- /src/assets/imgs/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/src/assets/imgs/bg1.jpg -------------------------------------------------------------------------------- /src/assets/imgs/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/src/assets/imgs/icon.png -------------------------------------------------------------------------------- /src/assets/imgs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinyavadav/Employee-Tracking-System/2492348b6158a4d955b4b2c46dcf8cec04f3b276/src/assets/imgs/logo.png -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Ionic App 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ionic", 3 | "short_name": "Ionic", 4 | "start_url": "index.html", 5 | "display": "standalone", 6 | "icons": [{ 7 | "src": "assets/imgs/logo.png", 8 | "sizes": "512x512", 9 | "type": "image/png" 10 | }], 11 | "background_color": "#4e8ef7", 12 | "theme_color": "#4e8ef7" 13 | } -------------------------------------------------------------------------------- /src/pages/add-employee/add-employee.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | Signup 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | Phone No. 33 | 34 | 35 | 36 | Forename 37 | 38 | 39 | 40 | Surname 41 | 42 | 43 | 44 | Role 45 | 46 | Manager 47 | Site Clerk 48 | Storeman 49 | Builder 50 | Electrician 51 | Carpenter 52 | Labourers 53 | 54 | 55 | 56 | Password 57 | 58 | 59 | 60 | 61 | 62 |
63 |
64 | -------------------------------------------------------------------------------- /src/pages/add-employee/add-employee.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { AddEmployeePage } from './add-employee'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | AddEmployeePage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(AddEmployeePage), 11 | ], 12 | }) 13 | export class AddEmployeePageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/add-employee/add-employee.scss: -------------------------------------------------------------------------------- 1 | page-add-employee { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/add-employee/add-employee.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, LoadingController, AlertController, ToastController } from 'ionic-angular'; 3 | import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 4 | import { Http } from '@angular/http'; 5 | import { GlobalProvider } from '../../providers/global/global'; 6 | /** 7 | * Generated class for the AddEmployeePage page. 8 | * 9 | * See https://ionicframework.com/docs/components/#navigation for more info on 10 | * Ionic pages and navigation. 11 | */ 12 | 13 | @IonicPage() 14 | @Component({ 15 | selector: 'page-add-employee', 16 | templateUrl: 'add-employee.html', 17 | }) 18 | export class AddEmployeePage { 19 | private registrationForm: FormGroup; 20 | constructor(private formBuilder: FormBuilder,public toastCtrl: ToastController, public global: GlobalProvider, private navCtrl: NavController, private loadingCtrl: LoadingController, public alertCtrl: AlertController, public http: Http) { 21 | var validators={ 22 | "phoneno":[Validators.required,Validators.pattern("[0-9]{10}")], 23 | "name":[Validators.required,Validators.pattern("[A-Za-z\s]{2,50}")], 24 | "password":[Validators.required,Validators.minLength(8),Validators.maxLength(20)] 25 | }; 26 | this.registrationForm=this.formBuilder.group({ 27 | phoneno: ['',validators.phoneno], 28 | forename: ['',validators.name], 29 | surname: ['',validators.name], 30 | role: ['',Validators.required], 31 | password: ['',validators.password], 32 | }); 33 | } 34 | 35 | ionViewDidLoad() { 36 | console.log('ionViewDidLoad AddEmployeePage'); 37 | } 38 | 39 | register() { 40 | console.log(this.registrationForm.value); 41 | if(this.registrationForm.valid){ 42 | let loader = this.loadingCtrl.create({ 43 | content: "Registering...", 44 | spinner:"bubbles" 45 | }); 46 | loader.present(); 47 | this.http.post(this.global.serverAddress+"api/addemployee.php", JSON.stringify(this.registrationForm.value)) 48 | .subscribe(data => { 49 | console.log(data["_body"]); 50 | let response = JSON.parse(data["_body"]); 51 | if(response.response=="success"){ 52 | let alert = this.alertCtrl.create({ 53 | title: 'Registration', 54 | subTitle: 'Employee successfully created!', 55 | buttons: ['OK'] 56 | }); 57 | alert.present(); 58 | this.navCtrl.pop(); 59 | }else{ 60 | let alert = this.alertCtrl.create({ 61 | title: 'Registration', 62 | subTitle: 'Phone Number is already taken!', 63 | buttons: ['OK'] 64 | }); 65 | alert.present(); 66 | } 67 | }, error => { 68 | let toast = this.toastCtrl.create({ 69 | message: 'Resolve Connectivity Issue!', 70 | duration: 3000, 71 | position: 'bottom', 72 | cssClass: 'dark-trans', 73 | closeButtonText: 'OK', 74 | showCloseButton: true 75 | }); 76 | toast.present(); 77 | } 78 | ); 79 | loader.dismiss(); 80 | }else{ 81 | let toast = this.toastCtrl.create({ 82 | message: 'Properly fill in all details!', 83 | duration: 3000, 84 | position: 'bottom', 85 | cssClass: 'dark-trans', 86 | closeButtonText: 'OK', 87 | showCloseButton: true 88 | }); 89 | toast.present(); 90 | } 91 | } 92 | 93 | 94 | } 95 | -------------------------------------------------------------------------------- /src/pages/employees/employees.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | Work Employees 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |

{{ employee.fldforename }} {{ employee.fldsurname }}

24 |

{{ employee.fldphone_no }}

25 | 26 |
27 |
28 |
29 | 30 | 31 | 32 |
33 | -------------------------------------------------------------------------------- /src/pages/employees/employees.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { EmployeesPage } from './employees'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | EmployeesPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(EmployeesPage), 11 | ], 12 | }) 13 | export class EmployeesPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/employees/employees.scss: -------------------------------------------------------------------------------- 1 | page-employees { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/employees/employees.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, AlertController, ToastController } from 'ionic-angular'; 3 | import { Http } from '@angular/http'; 4 | import { GlobalProvider } from "../../providers/global/global"; 5 | import { Storage } from '@ionic/storage'; 6 | import { AddEmployeePage } from '../add-employee/add-employee'; 7 | 8 | /** 9 | * Generated class for the EmployeesPage page. 10 | * 11 | * See https://ionicframework.com/docs/components/#navigation for more info on 12 | * Ionic pages and navigation. 13 | */ 14 | 15 | @IonicPage() 16 | @Component({ 17 | selector: 'page-employees', 18 | templateUrl: 'employees.html', 19 | }) 20 | export class EmployeesPage { 21 | employees:any; 22 | constructor(public toastCtrl:ToastController, public storage:Storage, public alertCtrl:AlertController, public http:Http,public global:GlobalProvider,public navCtrl: NavController, public navParams: NavParams) { 23 | } 24 | 25 | ionViewDidLoad() { 26 | console.log('ionViewDidLoad EmployeesPage'); 27 | } 28 | 29 | ionViewDidEnter(){ 30 | this.getEmployees(); 31 | } 32 | 33 | getEmployees() { 34 | this.http.get(this.global.serverAddress+"api/employees.php?ecno="+this.global.session.fldemployee_id) 35 | .subscribe(data => { 36 | let response=JSON.parse(data["_body"]); 37 | console.log(response); 38 | this.employees=response; 39 | }, error => { 40 | let alert = this.alertCtrl.create({ 41 | title: 'Employees', 42 | subTitle: 'Error connecting to Intenet!', 43 | buttons: ['OK'] 44 | }); 45 | alert.present(); 46 | }); 47 | } 48 | 49 | add(){ 50 | this.navCtrl.push(AddEmployeePage); 51 | } 52 | 53 | filterEmployees(ev: any) { 54 | this.http.get(this.global.serverAddress+"api/employees.php?ecno="+this.global.session.fldemployee_id) 55 | .subscribe(data => { 56 | let response=JSON.parse(data["_body"]); 57 | console.log(response); 58 | let val = ev.target.value; 59 | if (val && val.trim() !== '') { 60 | this.employees = response.filter((report) => { 61 | return ((report.fldsurname.toLowerCase().indexOf(val.toLowerCase()) > -1)); 62 | }); 63 | }else{ 64 | this.employees=response; 65 | } 66 | }, error => { 67 | let toast = this.toastCtrl.create({ 68 | message: 'Please connect to Internet!', 69 | duration: 3000, 70 | position: 'bottom', 71 | cssClass: 'dark-trans', 72 | closeButtonText: 'OK', 73 | showCloseButton: true 74 | }); 75 | toast.present(); 76 | } 77 | ); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/pages/home/home.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | SharpConsult Engineering 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |

{{ global.session.fldforename }} {{ global.session.fldsurname }}

35 |
36 | 37 | 38 |

{{ global.session.fldrole }}

39 |
40 | 41 | 42 |

{{ global.session.fldphone_no }}

43 |
44 |
45 | 46 | 47 |
48 | -------------------------------------------------------------------------------- /src/pages/home/home.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { HomePage } from './home'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | HomePage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(HomePage), 11 | ], 12 | }) 13 | export class HomePageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/home/home.scss: -------------------------------------------------------------------------------- 1 | page-home { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/home/home.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, AlertController, ToastController, LoadingController } from 'ionic-angular'; 3 | import { GlobalProvider } from "../../providers/global/global"; 4 | import { Geolocation } from '@ionic-native/geolocation'; 5 | import { Http } from '@angular/http'; 6 | import { Storage } from '@ionic/storage'; 7 | 8 | /** 9 | * Generated class for the HomePage page. 10 | * 11 | * See https://ionicframework.com/docs/components/#navigation for more info on 12 | * Ionic pages and navigation. 13 | */ 14 | 15 | @IonicPage() 16 | @Component({ 17 | selector: 'page-home', 18 | templateUrl: 'home.html', 19 | }) 20 | export class HomePage { 21 | loader:any; 22 | statusRecord:any; 23 | statusRecordLength:number=0; 24 | constructor(public storage:Storage, public loadingCtrl:LoadingController, public http:Http, public geolocation:Geolocation, public toastCtrl: ToastController, public alertCtrl:AlertController, public global:GlobalProvider, public navCtrl: NavController, public navParams: NavParams) { 25 | } 26 | 27 | ionViewDidEnter(){ 28 | this.getStatus(); 29 | console.log('ionViewDidLoad HomePage'); 30 | } 31 | 32 | submit(location_data:any){ 33 | this.http.post(this.global.serverAddress+"/api/location.php", JSON.stringify(location_data)) 34 | .subscribe(data => { 35 | console.log(data["_body"]); 36 | let response = JSON.parse(data["_body"]); 37 | if(response.response=="success"){ 38 | console.log('successfully uploaded!'); 39 | }else{ 40 | console.log('failed to update coordinates!'); 41 | } 42 | }, error => { 43 | console.log('Error getting location', error); 44 | } 45 | ); 46 | } 47 | 48 | getStatus(){ 49 | this.http.get(this.global.serverAddress+"/api/status.php?ecno="+this.global.session.fldemployee_id) 50 | .subscribe(data => { 51 | let response = JSON.parse(data["_body"]); 52 | this.statusRecord=response; 53 | console.log(this.statusRecord); 54 | this.updateLocation(); 55 | this.statusRecordLength=Object.keys(this.statusRecord).length; 56 | }, error => { 57 | console.log('Error getting location', error); 58 | } 59 | ); 60 | } 61 | 62 | updateLocation(){ 63 | this.geolocation.getCurrentPosition({ enableHighAccuracy: true }).then((resp) => { 64 | let data = { 65 | lat:resp.coords.latitude, 66 | lng:resp.coords.longitude, 67 | employee_id:this.global.session.fldemployee_id 68 | }; 69 | console.log(this.statusRecordLength); 70 | if(this.statusRecordLength>=1){ 71 | this.submit(data); 72 | }else{ 73 | console.log("failed to submit"); 74 | } 75 | }, err => { 76 | console.log('Error getting location', err); 77 | }); 78 | } 79 | 80 | checkIn(){ 81 | let alert = this.alertCtrl.create({ 82 | title: 'Check In', 83 | subTitle: 'Summarize your tasks for today!', 84 | inputs: [ 85 | { 86 | name: 'summary', 87 | placeholder: 'Summary' 88 | }, 89 | ], 90 | buttons: 91 | [ 92 | { 93 | text:'Check In', handler: data=>{ 94 | this.loader = this.loadingCtrl.create({ 95 | content: "Requesting...", 96 | spinner:"bubbles" 97 | }); 98 | this.loader.present(); 99 | let formData = { 100 | employee_id:this.global.session.fldemployee_id, 101 | summary:data.summary 102 | }; 103 | this.http.post(this.global.serverAddress+"/api/checkin.php", JSON.stringify(formData)) 104 | .subscribe(data => { 105 | console.log(data["_body"]); 106 | let response = JSON.parse(data["_body"]); 107 | if(response.response=="success"){ 108 | let alert = this.alertCtrl.create({ 109 | title: 'Home', 110 | subTitle: "Successfully Checked In!", 111 | buttons: ['OK'] 112 | }); 113 | alert.present(); 114 | this.getStatus(); 115 | }else{ 116 | let alert = this.alertCtrl.create({ 117 | title: 'Home', 118 | subTitle: "Check In could not be processed!", 119 | buttons: ['OK'] 120 | }); 121 | alert.present(); 122 | } 123 | }, error => { 124 | console.log('Error requesting Check In!', error); 125 | } 126 | ); 127 | this.loader.dismiss(); 128 | } 129 | }, 130 | { 131 | text: 'Cancel' 132 | } 133 | ] 134 | }); 135 | alert.present(); 136 | } 137 | 138 | checkOut(){ 139 | let alert = this.alertCtrl.create({ 140 | title: 'Check Out', 141 | subTitle: 'Are you sure you want to check out?', 142 | buttons: 143 | [ 144 | { 145 | text:'Check Out', handler: data=>{ 146 | this.loader = this.loadingCtrl.create({ 147 | content: "Requesting...", 148 | spinner:"bubbles" 149 | }); 150 | this.loader.present(); 151 | let formData = { 152 | employee_id:this.global.session.fldemployee_id, 153 | }; 154 | this.http.post(this.global.serverAddress+"/api/checkout.php", JSON.stringify(formData)) 155 | .subscribe(data => { 156 | console.log(data["_body"]); 157 | let response = JSON.parse(data["_body"]); 158 | if(response.response=="success"){ 159 | let alert = this.alertCtrl.create({ 160 | title: 'Home', 161 | subTitle: "Successfully Checked Out!", 162 | buttons: ['OK'] 163 | }); 164 | alert.present(); 165 | this.getStatus(); 166 | }else{ 167 | let alert = this.alertCtrl.create({ 168 | title: 'Home', 169 | subTitle: "Check Out could not be processed!", 170 | buttons: ['OK'] 171 | }); 172 | alert.present(); 173 | } 174 | }, error => { 175 | console.log('Error requesting Check In!', error); 176 | } 177 | ); 178 | this.loader.dismiss(); 179 | } 180 | }, 181 | { 182 | text: 'Cancel' 183 | } 184 | ] 185 | }); 186 | alert.present(); 187 | } 188 | } 189 | -------------------------------------------------------------------------------- /src/pages/login/login.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
32 | -------------------------------------------------------------------------------- /src/pages/login/login.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { LoginPage } from './login'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | LoginPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(LoginPage), 11 | ], 12 | }) 13 | export class LoginPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/login/login.scss: -------------------------------------------------------------------------------- 1 | page-login { 2 | 3 | } -------------------------------------------------------------------------------- /src/pages/login/login.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, AlertController, ToastController, LoadingController} from 'ionic-angular'; 3 | import { Http } from '@angular/http'; 4 | import { HomePage } from '../home/home'; 5 | import { Storage } from '@ionic/storage'; 6 | import { GlobalProvider } from "../../providers/global/global"; 7 | import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 8 | /** 9 | * Generated class for the LoginPage page. 10 | * 11 | * See https://ionicframework.com/docs/components/#navigation for more info on 12 | * Ionic pages and navigation. 13 | */ 14 | 15 | @IonicPage() 16 | @Component({ 17 | selector: 'page-login', 18 | templateUrl: 'login.html', 19 | }) 20 | export class LoginPage { 21 | private loginForm: FormGroup; 22 | isDisabled:boolean=false; 23 | constructor(public loadingCtrl:LoadingController, private formBuilder: FormBuilder,public global:GlobalProvider,public navCtrl: NavController, public navParams: NavParams, public alertCtrl: AlertController, public http: Http, public toastCtrl: ToastController, private storage: Storage) { 24 | this.loginForm=this.formBuilder.group({ 25 | phoneno: ['',Validators.required], 26 | password: ['',Validators.required] 27 | }); 28 | } 29 | 30 | loginFxn() { 31 | if(this.loginForm.valid){ 32 | let loader = this.loadingCtrl.create({ 33 | content: "Authenticating...", 34 | spinner:"bubbles" 35 | }); 36 | loader.present(); 37 | this.http.post(this.global.serverAddress+"api/login.php", JSON.stringify(this.loginForm.value)) 38 | .subscribe(data => { 39 | console.log(data["_body"]); 40 | let response=JSON.parse(data["_body"]); 41 | if(response.response=="success"){ 42 | let toast = this.toastCtrl.create({ 43 | message: 'Login was successfully', 44 | duration: 3000, 45 | position: 'bottom', 46 | cssClass: 'dark-trans', 47 | closeButtonText: 'OK', 48 | showCloseButton: true 49 | }); 50 | toast.present(); 51 | this.navCtrl.setRoot(HomePage); 52 | this.storage.set("session",response); 53 | this.global.session=response; 54 | }else{ 55 | let alert = this.alertCtrl.create({ 56 | title: 'Login', 57 | subTitle: 'Credentials are incorrect!', 58 | buttons: ['OK'] 59 | }); 60 | alert.present(); 61 | } 62 | }, error => { 63 | let toast = this.toastCtrl.create({ 64 | message: 'Please connect to Internet!', 65 | duration: 3000, 66 | position: 'bottom', 67 | cssClass: 'dark-trans', 68 | closeButtonText: 'OK', 69 | showCloseButton: true 70 | }); 71 | toast.present(); 72 | } 73 | ); 74 | loader.dismiss(); 75 | }else{ 76 | let alert = this.alertCtrl.create({ 77 | title: 'Login', 78 | subTitle: 'Phone Number or Password cannot be null!', 79 | buttons: ['RETRY'] 80 | }); 81 | alert.present(); 82 | } 83 | } 84 | 85 | ionViewDidLoad() { 86 | console.log('ionViewDidLoad LoginPage'); 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /src/pages/manager/manager.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | SharpConsult Engineering 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/pages/manager/manager.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { ManagerPage } from './manager'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | ManagerPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(ManagerPage), 11 | ], 12 | }) 13 | export class ManagerPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/manager/manager.scss: -------------------------------------------------------------------------------- 1 | page-manager { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/manager/manager.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, AlertController, ToastController, LoadingController } from 'ionic-angular'; 3 | import { GlobalProvider } from "../../providers/global/global"; 4 | import { SchedulesPage } from '../schedules/schedules'; 5 | import { TrackingPage } from '../tracking/tracking'; 6 | import { EmployeesPage } from '../employees/employees'; 7 | import { Geolocation } from '@ionic-native/geolocation'; 8 | import { Http } from '@angular/http'; 9 | import { Storage } from '@ionic/storage'; 10 | 11 | /** 12 | * Generated class for the ManagerPage page. 13 | * 14 | * See https://ionicframework.com/docs/components/#navigation for more info on 15 | * Ionic pages and navigation. 16 | */ 17 | 18 | @IonicPage() 19 | @Component({ 20 | selector: 'page-manager', 21 | templateUrl: 'manager.html', 22 | }) 23 | export class ManagerPage { 24 | loader:any; 25 | constructor(public storage:Storage, public loadingCtrl:LoadingController, public http:Http, public geolocation:Geolocation, public toastCtrl: ToastController, public alertCtrl:AlertController, public global:GlobalProvider, public navCtrl: NavController, public navParams: NavParams) { 26 | 27 | } 28 | 29 | ionViewDidLoad() { 30 | console.log('ionViewDidLoad ManagerPage'); 31 | } 32 | 33 | showSchedules(){ 34 | this.navCtrl.push(SchedulesPage); 35 | } 36 | 37 | 38 | tracking(){ 39 | this.navCtrl.push(TrackingPage); 40 | } 41 | 42 | employees(){ 43 | this.navCtrl.push(EmployeesPage); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/pages/map/map.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | Map 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 | -------------------------------------------------------------------------------- /src/pages/map/map.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { MapPage } from './map'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | MapPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(MapPage), 11 | ], 12 | }) 13 | export class MapPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/map/map.scss: -------------------------------------------------------------------------------- 1 | page-map { 2 | #map { 3 | height: 100% 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/pages/map/map.ts: -------------------------------------------------------------------------------- 1 | import { Component, ViewChild, ElementRef } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, Platform, ToastController, AlertController } from 'ionic-angular'; 3 | import { Geolocation } from '@ionic-native/geolocation'; 4 | import { Storage } from '@ionic/storage'; 5 | import { GlobalProvider } from "../../providers/global/global"; 6 | 7 | /** 8 | * Generated class for the MapPage page. 9 | * 10 | * See https://ionicframework.com/docs/components/#navigation for more info on 11 | * Ionic pages and navigation. 12 | */ 13 | declare var google: any; 14 | 15 | @IonicPage() 16 | @Component({ 17 | selector: 'page-map', 18 | templateUrl: 'map.html', 19 | }) 20 | export class MapPage { 21 | @ViewChild('map') mapElement: ElementRef; 22 | map: any; 23 | markers=[]; 24 | nodes:any; 25 | 26 | toast:any; 27 | 28 | constructor(public global:GlobalProvider, public alertCtrl: AlertController, public toastCtrl:ToastController,public storage: Storage,public geolocation: Geolocation, public navCtrl: NavController, public navParams: NavParams, public platform: Platform) { 29 | 30 | } 31 | 32 | ionViewDidLoad() { 33 | this.platform.ready().then(() => { 34 | this.initMap(); 35 | }); 36 | } 37 | 38 | makeToast(message:string){ 39 | this.toast = this.toastCtrl.create({ 40 | message: message, 41 | duration: 3000, 42 | position: 'bottom', 43 | cssClass: 'dark-trans', 44 | closeButtonText: 'OK', 45 | showCloseButton: true 46 | }); 47 | this.toast.present(); 48 | } 49 | 50 | initMap() { 51 | //timeout: 5000 52 | this.geolocation.getCurrentPosition({ maximumAge: 3000, enableHighAccuracy: true }).then((resp) => { 53 | let mylocation = new google.maps.LatLng(resp.coords.latitude,resp.coords.longitude); 54 | this.map = new google.maps.Map(this.mapElement.nativeElement, { 55 | zoom: 15, 56 | center: mylocation, 57 | mapTypeId: 'terrain' 58 | }); 59 | this.addMarker(mylocation); 60 | }, err => { 61 | this.makeToast("Error: "+err.message); 62 | }); 63 | } 64 | 65 | addMarker(location) { 66 | let marker = new google.maps.Marker({ 67 | position: location, 68 | map: this.map, 69 | animation: google.maps.Animation.DROP, 70 | }); 71 | let infoWindowData:any={ 72 | title: "My Location", 73 | contentString: '

My Location

Phone No: '+this.global.session.fldphoneno+'
Role: '+this.global.session.fldrole+'
Date/Time: '+this.global.session.fldtimestamp+'
' 74 | 75 | }; 76 | var infowindow = new google.maps.InfoWindow({ 77 | content: infoWindowData.contentString 78 | }); 79 | marker.addListener('click', function() { 80 | infowindow.open(this.map, marker); 81 | setTimeout(function(){infowindow.close();},5000); 82 | }); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/pages/my-schedules/my-schedules.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | My Work Schedules 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |

From: {{ schedule.fldcheckin }}

21 |

To: {{ schedule.fldcheckout }}

22 |

Time Worked: {{ (schedule.fldhours/3600) | number }} hours

23 |

Summary: {{ schedule.fldsummary }}

24 |
25 | 29 |
30 |
31 |
32 | -------------------------------------------------------------------------------- /src/pages/my-schedules/my-schedules.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { MySchedulesPage } from './my-schedules'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | MySchedulesPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(MySchedulesPage), 11 | ], 12 | }) 13 | export class SchedulesPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/my-schedules/my-schedules.scss: -------------------------------------------------------------------------------- 1 | page-my-schedules { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/my-schedules/my-schedules.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, AlertController, ToastController } from 'ionic-angular'; 3 | import { Http } from '@angular/http'; 4 | import { GlobalProvider } from "../../providers/global/global"; 5 | import { Storage } from '@ionic/storage'; 6 | 7 | /** 8 | * Generated class for the MySchedulesPage page. 9 | * 10 | * See https://ionicframework.com/docs/components/#navigation for more info on 11 | * Ionic pages and navigation. 12 | */ 13 | 14 | @IonicPage() 15 | @Component({ 16 | selector: 'page-my-schedules', 17 | templateUrl: 'my-schedules.html', 18 | }) 19 | export class MySchedulesPage { 20 | schedules:any; 21 | constructor(public toastCtrl:ToastController, public storage:Storage, public alertCtrl:AlertController, public http:Http,public global:GlobalProvider,public navCtrl: NavController, public navParams: NavParams) { 22 | } 23 | 24 | ionViewDidLoad() { 25 | console.log('ionViewDidLoad MySchedulesPage'); 26 | this.getSchedules(); 27 | } 28 | 29 | getSchedules() { 30 | this.http.get(this.global.serverAddress+"api/my-schedules.php?ecno="+this.global.session.fldemployee_id) 31 | .subscribe(data => { 32 | let response=JSON.parse(data["_body"]); 33 | console.log(response); 34 | this.schedules=response; 35 | }, error => { 36 | let alert = this.alertCtrl.create({ 37 | title: 'Schedules', 38 | subTitle: 'Error connecting to Intenet!', 39 | buttons: ['OK'] 40 | }); 41 | alert.present(); 42 | }); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/pages/schedules/schedules.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | Worked Hours 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |

[{{ schedule.fldemployee_id }}] {{ schedule.fldforename }} {{ schedule.fldsurname }}

24 |

From: {{ schedule.fldcheckin }}

25 |

To: {{ schedule.fldcheckout }}

26 |

Time Worked: {{ (schedule.fldhours/3600) | number }} hours

27 |

Summary: {{ schedule.fldsummary }}

28 |
29 | 33 |
34 |
35 |
36 | -------------------------------------------------------------------------------- /src/pages/schedules/schedules.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { SchedulesPage } from './schedules'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | SchedulesPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(SchedulesPage), 11 | ], 12 | }) 13 | export class SchedulesPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/schedules/schedules.scss: -------------------------------------------------------------------------------- 1 | page-schedules { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/schedules/schedules.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, AlertController, ToastController } from 'ionic-angular'; 3 | import { Http } from '@angular/http'; 4 | import { GlobalProvider } from "../../providers/global/global"; 5 | import { Storage } from '@ionic/storage'; 6 | 7 | /** 8 | * Generated class for the SchedulesPage page. 9 | * 10 | * See https://ionicframework.com/docs/components/#navigation for more info on 11 | * Ionic pages and navigation. 12 | */ 13 | 14 | @IonicPage() 15 | @Component({ 16 | selector: 'page-schedules', 17 | templateUrl: 'schedules.html', 18 | }) 19 | export class SchedulesPage { 20 | schedules:any; 21 | constructor(public toastCtrl:ToastController, public storage:Storage, public alertCtrl:AlertController, public http:Http,public global:GlobalProvider,public navCtrl: NavController, public navParams: NavParams) { 22 | } 23 | 24 | ionViewDidLoad() { 25 | console.log('ionViewDidLoad SchedulesPage'); 26 | this.getSchedules(); 27 | } 28 | 29 | getSchedules() { 30 | this.http.get(this.global.serverAddress+"api/schedules.php?ecno="+this.global.session.fldemployee_id) 31 | .subscribe(data => { 32 | let response=JSON.parse(data["_body"]); 33 | console.log(response); 34 | this.schedules=response; 35 | }, error => { 36 | let alert = this.alertCtrl.create({ 37 | title: 'Schedules', 38 | subTitle: 'Error connecting to Intenet!', 39 | buttons: ['OK'] 40 | }); 41 | alert.present(); 42 | }); 43 | } 44 | 45 | filterSchedules(ev: any) { 46 | this.http.get(this.global.serverAddress+"api/schedules.php?ecno="+this.global.session.fldemployee_id) 47 | .subscribe(data => { 48 | let response=JSON.parse(data["_body"]); 49 | console.log(response); 50 | let val = ev.target.value; 51 | if (val && val.trim() !== '') { 52 | this.schedules = response.filter((report) => { 53 | return ((report.fldsurname.toLowerCase().indexOf(val.toLowerCase()) > -1)); 54 | }); 55 | }else{ 56 | this.schedules=response; 57 | } 58 | }, error => { 59 | let toast = this.toastCtrl.create({ 60 | message: 'Please connect to Internet!', 61 | duration: 3000, 62 | position: 'bottom', 63 | cssClass: 'dark-trans', 64 | closeButtonText: 'OK', 65 | showCloseButton: true 66 | }); 67 | toast.present(); 68 | } 69 | ); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/pages/settings/settings.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | Settings 11 | 12 | 13 | 14 | 15 |
16 | 17 | Change Password 18 | 19 | Set Password 20 | 21 | 22 | 23 | Verify Password 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 | 32 | 33 | Server Address 34 | 35 | 36 | 37 | 38 |
39 |
-------------------------------------------------------------------------------- /src/pages/settings/settings.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { SettingsPage } from './settings'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | SettingsPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(SettingsPage), 11 | ], 12 | }) 13 | export class SettingsPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/settings/settings.scss: -------------------------------------------------------------------------------- 1 | page-settings { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/settings/settings.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, AlertController, ToastController} from 'ionic-angular'; 3 | import { Http } from '@angular/http'; 4 | import { Storage } from '@ionic/storage'; 5 | import { GlobalProvider } from '../../providers/global/global'; 6 | import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 7 | 8 | /** 9 | * Generated class for the SettingsPage page. 10 | * 11 | * See https://ionicframework.com/docs/components/#navigation for more info on 12 | * Ionic pages and navigation. 13 | */ 14 | 15 | @IonicPage() 16 | @Component({ 17 | selector: 'page-settings', 18 | templateUrl: 'settings.html', 19 | }) 20 | export class SettingsPage { 21 | serverAddress:string; 22 | private passwordForm: FormGroup; 23 | private settingsForm: FormGroup; 24 | constructor(private formBuilder: FormBuilder,public global: GlobalProvider, public navCtrl: NavController, public navParams: NavParams, public alertCtrl: AlertController, public http: Http, public toastCtrl: ToastController, public storage: Storage) { 25 | var validators={ 26 | "password":[Validators.required,Validators.maxLength(20),Validators.minLength(8)], 27 | }; 28 | 29 | this.passwordForm=this.formBuilder.group({ 30 | password: ['',validators.password], 31 | verifypassword: ['',validators.password], 32 | phoneno: [''] 33 | }); 34 | 35 | this.serverAddress=this.global.serverAddress; 36 | var myServerAdressValidator=[Validators.required,Validators.pattern('(?:(?:(?:ht|f)tp)s?://)?[\\w_-]+([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?')]; 37 | this.settingsForm=this.formBuilder.group({ 38 | serverAddress: ['',myServerAdressValidator] 39 | }); 40 | } 41 | 42 | ionViewDidLoad() { 43 | console.log('ionViewDidLoad SettingsPage'); 44 | } 45 | 46 | updateSettings(){ 47 | if(this.settingsForm.valid){ 48 | this.storage.set("serverAddress",this.serverAddress); 49 | this.global.serverAddress=this.serverAddress; 50 | let toast = this.toastCtrl.create({ 51 | message: 'Settings have been updated!', 52 | duration: 3000, 53 | position: 'bottom', 54 | cssClass: 'dark-trans', 55 | closeButtonText: 'OK', 56 | showCloseButton: true 57 | }); 58 | toast.present(); 59 | }else{ 60 | let toast = this.toastCtrl.create({ 61 | message: 'Invalid URL!', 62 | duration: 3000, 63 | position: 'bottom', 64 | cssClass: 'dark-trans', 65 | closeButtonText: 'OK', 66 | showCloseButton: true 67 | }); 68 | toast.present(); 69 | } 70 | } 71 | 72 | updatePassword(){ 73 | if(this.passwordForm.valid){ 74 | this.http.post(this.global.serverAddress+"/api/password.php", JSON.stringify(this.passwordForm.value)) 75 | .subscribe(data => { 76 | console.log(data["_body"]); 77 | let response = JSON.parse(data["_body"]); 78 | if(response.response=="success"){ 79 | let alert = this.alertCtrl.create({ 80 | title: 'Password', 81 | subTitle: 'Password successfully changed!', 82 | buttons: ['OK'] 83 | }); 84 | alert.present(); 85 | this.passwordForm.reset(); 86 | }else{ 87 | let alert = this.alertCtrl.create({ 88 | title: 'Password', 89 | subTitle: response.response, 90 | buttons: ['OK'] 91 | }); 92 | alert.present(); 93 | } 94 | }, error => { 95 | let toast = this.toastCtrl.create({ 96 | message: 'Please connect to Internet!', 97 | duration: 3000, 98 | position: 'bottom', 99 | cssClass: 'dark-trans', 100 | closeButtonText: 'OK', 101 | showCloseButton: true 102 | }); 103 | toast.present(); 104 | } 105 | ); 106 | }else{ 107 | let alert = this.alertCtrl.create({ 108 | title: 'Password', 109 | subTitle: 'Please use valid password!', 110 | buttons: ['RETRY'] 111 | }); 112 | alert.present(); 113 | } 114 | } 115 | 116 | } 117 | -------------------------------------------------------------------------------- /src/pages/tracking/tracking.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | Location Tracking 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 | -------------------------------------------------------------------------------- /src/pages/tracking/tracking.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { TrackingPage } from './tracking'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | TrackingPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(TrackingPage), 11 | ], 12 | }) 13 | export class TrackingPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/tracking/tracking.scss: -------------------------------------------------------------------------------- 1 | page-tracking { 2 | #map { 3 | height: 100% 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/pages/tracking/tracking.ts: -------------------------------------------------------------------------------- 1 | import { Component, ViewChild, ElementRef } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, Platform, ToastController, AlertController } from 'ionic-angular'; 3 | import { Geolocation } from '@ionic-native/geolocation'; 4 | import { Storage } from '@ionic/storage'; 5 | import { GlobalProvider } from "../../providers/global/global"; 6 | import { Http } from '@angular/http'; 7 | /** 8 | * Generated class for the TrackingPage page. 9 | * 10 | * See https://ionicframework.com/docs/components/#navigation for more info on 11 | * Ionic pages and navigation. 12 | */ 13 | declare var google: any; 14 | 15 | @IonicPage() 16 | @Component({ 17 | selector: 'page-tracking', 18 | templateUrl: 'tracking.html', 19 | }) 20 | export class TrackingPage { 21 | @ViewChild('map') mapElement: ElementRef; 22 | map: any; 23 | nodes=[]; 24 | markers=[]; 25 | toast:any; 26 | 27 | constructor(public http:Http, public global: GlobalProvider, public alertCtrl: AlertController, public toastCtrl:ToastController,public storage: Storage,public geolocation: Geolocation, public navCtrl: NavController, public navParams: NavParams, public platform: Platform) { 28 | 29 | } 30 | 31 | ionViewDidLoad() { 32 | this.platform.ready().then(() => { 33 | this.initMap(); 34 | this.getLocations(); 35 | }); 36 | } 37 | 38 | makeToast(message:string){ 39 | this.toast = this.toastCtrl.create({ 40 | message: message, 41 | duration: 3000, 42 | position: 'bottom', 43 | cssClass: 'dark-trans', 44 | closeButtonText: 'OK', 45 | showCloseButton: true 46 | }); 47 | this.toast.present(); 48 | } 49 | 50 | getLocations(){ 51 | this.http.get(this.global.serverAddress+"/api/markers.php?ecno="+this.global.session.fldemployee_id) 52 | .subscribe(data => { 53 | console.log(data["_body"]); 54 | let response = JSON.parse(data["_body"]); 55 | this.markers=response; 56 | for(var i=0; i < this.markers.length; i++){ 57 | let location = new google.maps.LatLng(this.markers[i].fldlatitude,this.markers[i].fldlongitude); 58 | this.addMarker(location,this.markers[i]); 59 | } 60 | }, error => { 61 | console.log('Error getting location', error); 62 | } 63 | ); 64 | } 65 | 66 | initMap() { 67 | //timeout: 5000 68 | this.geolocation.getCurrentPosition({ maximumAge: 3000, enableHighAccuracy: true }).then((resp) => { 69 | let mylocation = new google.maps.LatLng(resp.coords.latitude,resp.coords.longitude); 70 | this.map = new google.maps.Map(this.mapElement.nativeElement, { 71 | zoom: 18, 72 | center: mylocation, 73 | mapTypeId: 'terrain' 74 | }); 75 | }, err => { 76 | this.makeToast("Error: "+err.message); 77 | }); 78 | } 79 | 80 | addMarker(location,data) { 81 | let infoWindowData:any={ 82 | title: data.fldforename+' '+data.fldsurname, 83 | contentString: '

'+data.fldforename+' '+data.fldsurname+'

Phone No: '+data.fldphone_no+'
Role: '+data.fldrole+'
Date/Time: '+data.fldtimestamp+'
' 84 | 85 | }; 86 | console.log(data); 87 | var infowindow = new google.maps.InfoWindow({ 88 | content: infoWindowData.contentString 89 | }); 90 | let marker = new google.maps.Marker({ 91 | position: location, 92 | map: this.map, 93 | animation: google.maps.Animation.DROP, 94 | }); 95 | marker.addListener('click', function() { 96 | infowindow.open(this.map, marker); 97 | setTimeout(function(){infowindow.close();},5000); 98 | }); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/pipes/pipes.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RelativeTimePipe } from './relative-time/relative-time'; 3 | @NgModule({ 4 | declarations: [RelativeTimePipe], 5 | imports: [], 6 | exports: [RelativeTimePipe] 7 | }) 8 | export class PipesModule {} 9 | -------------------------------------------------------------------------------- /src/pipes/relative-time/relative-time.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | import distanceInWordsToNow from 'date-fns/distance_in_words_to_now'; 3 | 4 | /** 5 | * Generated class for the RelativeTimePipe pipe. 6 | * 7 | * See https://angular.io/api/core/Pipe for more info on Angular Pipes. 8 | */ 9 | @Pipe({ 10 | name: 'relativeTime', 11 | }) 12 | export class RelativeTimePipe implements PipeTransform { 13 | /** 14 | * Takes a value and makes it lowercase. 15 | */ 16 | transform(value: string, ...args) { 17 | var timestamp=parseInt(value); 18 | return distanceInWordsToNow(new Date(timestamp), { addSuffix: true }); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/providers/global/global.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | /* 4 | Generated class for the GlobalProvider provider. 5 | 6 | See https://angular.io/guide/dependency-injection for more info on providers 7 | and Angular DI. 8 | */ 9 | @Injectable() 10 | export class GlobalProvider { 11 | session:any; 12 | serverAddress:string; 13 | } 14 | -------------------------------------------------------------------------------- /src/providers/my-service/my-service.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient } from '@angular/common/http'; 2 | import { Injectable } from '@angular/core'; 3 | 4 | /* 5 | Generated class for the MyServiceProvider provider. 6 | 7 | See https://angular.io/guide/dependency-injection for more info on providers 8 | and Angular DI. 9 | */ 10 | @Injectable() 11 | export class MyServiceProvider { 12 | 13 | constructor(public http: HttpClient) { 14 | console.log('Hello MyServiceProvider Provider'); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/service-worker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Check out https://googlechromelabs.github.io/sw-toolbox/ for 3 | * more info on how to use sw-toolbox to custom configure your service worker. 4 | */ 5 | 6 | 7 | 'use strict'; 8 | importScripts('./build/sw-toolbox.js'); 9 | 10 | self.toolbox.options.cache = { 11 | name: 'ionic-cache' 12 | }; 13 | 14 | // pre-cache our key assets 15 | self.toolbox.precache( 16 | [ 17 | './build/main.js', 18 | './build/vendor.js', 19 | './build/main.css', 20 | './build/polyfills.js', 21 | 'index.html', 22 | 'manifest.json' 23 | ] 24 | ); 25 | 26 | // dynamically cache any other local assets 27 | self.toolbox.router.any('/*', self.toolbox.fastest); 28 | 29 | // for any other requests go to the network, cache, 30 | // and then only use that cached resource if your user goes offline 31 | self.toolbox.router.default = self.toolbox.networkFirst; 32 | -------------------------------------------------------------------------------- /src/theme/variables.scss: -------------------------------------------------------------------------------- 1 | // Ionic Variables and Theming. For more info, please see: 2 | // http://ionicframework.com/docs/theming/ 3 | 4 | // Font path is used to include ionicons, 5 | // roboto, and noto sans fonts 6 | $font-path: "../assets/fonts"; 7 | 8 | 9 | // The app direction is used to include 10 | // rtl styles in your app. For more info, please see: 11 | // http://ionicframework.com/docs/theming/rtl-support/ 12 | $app-direction: ltr; 13 | 14 | 15 | @import "ionic.globals"; 16 | 17 | 18 | // Shared Variables 19 | // -------------------------------------------------- 20 | // To customize the look and feel of this app, you can override 21 | // the Sass variables found in Ionic's source scss files. 22 | // To view all the possible Ionic variables, see: 23 | // http://ionicframework.com/docs/theming/overriding-ionic-variables/ 24 | 25 | 26 | 27 | 28 | // Named Color Variables 29 | // -------------------------------------------------- 30 | // Named colors makes it easy to reuse colors on various components. 31 | // It's highly recommended to change the default colors 32 | // to match your app's branding. Ionic uses a Sass map of 33 | // colors so you can add, rename and remove colors as needed. 34 | // The "primary" color is the only required color in the map. 35 | 36 | $colors: ( 37 | primary: #488aff, 38 | secondary: #32db64, 39 | danger: #f53d3d, 40 | light: #f4f4f4, 41 | dark: #222 42 | ); 43 | 44 | 45 | // App iOS Variables 46 | // -------------------------------------------------- 47 | // iOS only Sass variables can go here 48 | 49 | 50 | 51 | 52 | // App Material Design Variables 53 | // -------------------------------------------------- 54 | // Material Design only Sass variables can go here 55 | 56 | 57 | 58 | 59 | // App Windows Variables 60 | // -------------------------------------------------- 61 | // Windows only Sass variables can go here 62 | 63 | 64 | 65 | 66 | // App Theme 67 | // -------------------------------------------------- 68 | // Ionic apps can have different themes applied, which can 69 | // then be future customized. This import comes last 70 | // so that the above variables are used and Ionic's 71 | // default are overridden. 72 | 73 | @import "ionic.theme.default"; 74 | 75 | 76 | // Ionicons 77 | // -------------------------------------------------- 78 | // The premium icon font for Ionic. For more info, please see: 79 | // http://ionicframework.com/docs/ionicons/ 80 | 81 | @import "ionic.ionicons"; 82 | 83 | 84 | // Fonts 85 | // -------------------------------------------------- 86 | 87 | @import "roboto"; 88 | @import "noto-sans"; 89 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "declaration": false, 5 | "emitDecoratorMetadata": true, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "dom", 9 | "es2015" 10 | ], 11 | "module": "es2015", 12 | "moduleResolution": "node", 13 | "sourceMap": true, 14 | "target": "es5" 15 | }, 16 | "include": [ 17 | "src/**/*.ts" 18 | ], 19 | "exclude": [ 20 | "node_modules", 21 | "src/**/*.spec.ts", 22 | "src/**/__tests__/*.ts" 23 | ], 24 | "compileOnSave": false, 25 | "atom": { 26 | "rewriteTsconfig": false 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-duplicate-variable": true, 4 | "no-unused-variable": [ 5 | true 6 | ] 7 | }, 8 | "rulesDirectory": [ 9 | "node_modules/tslint-eslint-rules/dist/rules" 10 | ] 11 | } 12 | --------------------------------------------------------------------------------