From 335758fbd0d1ff93999abd54c8807a2e022fc95f Mon Sep 17 00:00:00 2001 From: ashwaq Date: Tue, 21 Jan 2020 14:22:57 +0300 Subject: [PATCH 01/15] add login design --- .../authentication/authentication.module.ts | 9 +- .../change-password.component.html | 30 ++- .../change-password.component.scss | 31 +++ .../change-password.component.ts | 3 +- .../check-user/check-user.component.html | 25 ++- .../check-user/check-user.component.scss | 36 +++- .../check-user/check-user.component.ts | 3 +- .../confirm-login.component.html | 49 +++-- .../confirm-login.component.scss | 10 + .../confirm-login/confirm-login.component.ts | 138 +++++++++++-- .../forgot/forgot.component.html | 22 ++- .../authentication/forgot/forgot.component.ts | 2 + .../authentication/login/login.component.html | 73 +++++-- .../authentication/login/login.component.scss | 118 ++++++++++++ .../authentication/login/login.component.ts | 37 +++- .../sms-page/sms-page.page.html | 43 ++++- .../sms-page/sms-page.page.scss | 49 ++++- .../authentication/sms-page/sms-page.page.ts | 76 +++++++- .../welcome/welcome.component.html | 3 + .../welcome/welcome.component.scss | 0 .../welcome/welcome.component.spec.ts | 27 +++ .../welcome/welcome.component.ts | 14 ++ Mohem/src/app/hmg-common/hmg-common.module.ts | 14 +- .../models/smscheck.response.ts | 1 + .../ui/button/button.component.scss | 2 +- .../hmg-common/ui/button/button.component.ts | 2 + .../ui/welcome-login/welcome.component.html | 69 +++++++ .../ui/welcome-login/welcome.component.scss | 68 +++++++ .../welcome-login/welcome.component.spec.ts | 27 +++ .../ui/welcome-login/welcome.component.ts | 182 ++++++++++++++++++ Mohem/src/assets/icon/login/lock.png | Bin 0 -> 2333 bytes Mohem/src/assets/icon/login/password.png | Bin 0 -> 4809 bytes Mohem/src/assets/imgs/CSLogo.png | Bin 0 -> 9526 bytes Mohem/src/assets/imgs/header.png | Bin 0 -> 21633 bytes Mohem/src/assets/imgs/more.png | Bin 1867 -> 568 bytes Mohem/src/assets/imgs/more2.png | Bin 0 -> 1867 bytes Mohem/src/assets/localization/i18n.json | 62 ++++++ Mohem/src/theme/styles.scss | 74 ++++++- Mohem/src/theme/variables.scss | 5 +- 39 files changed, 1206 insertions(+), 98 deletions(-) create mode 100644 Mohem/src/app/authentication/welcome/welcome.component.html create mode 100644 Mohem/src/app/authentication/welcome/welcome.component.scss create mode 100644 Mohem/src/app/authentication/welcome/welcome.component.spec.ts create mode 100644 Mohem/src/app/authentication/welcome/welcome.component.ts create mode 100644 Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.html create mode 100644 Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.scss create mode 100644 Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.spec.ts create mode 100644 Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.ts create mode 100644 Mohem/src/assets/icon/login/lock.png create mode 100644 Mohem/src/assets/icon/login/password.png create mode 100644 Mohem/src/assets/imgs/CSLogo.png create mode 100644 Mohem/src/assets/imgs/header.png create mode 100644 Mohem/src/assets/imgs/more2.png diff --git a/Mohem/src/app/authentication/authentication.module.ts b/Mohem/src/app/authentication/authentication.module.ts index 520c6c77..31c88e82 100644 --- a/Mohem/src/app/authentication/authentication.module.ts +++ b/Mohem/src/app/authentication/authentication.module.ts @@ -21,7 +21,7 @@ import { SmsPageComponent } from './sms-page/sms-page.page'; import { CheckUserComponent } from './check-user/check-user.component'; import { ChangePasswordComponent } from './change-password/change-password.component'; import {ConfirmLoginComponent} from '../authentication/confirm-login/confirm-login.component' - +import {WelcomeComponent} from '../authentication/welcome/welcome.component' const routes: Routes = [ { @@ -51,6 +51,10 @@ const routes: Routes = [ { path: 'confirmLogin', component: ConfirmLoginComponent + }, + { + path: 'welcom', + component: WelcomeComponent } ] } @@ -77,7 +81,8 @@ const routes: Routes = [ SmsPageComponent, CheckUserComponent, ChangePasswordComponent, - ConfirmLoginComponent + // ConfirmLoginComponent, + WelcomeComponent ], providers:[ FingerprintAIO, diff --git a/Mohem/src/app/authentication/change-password/change-password.component.html b/Mohem/src/app/authentication/change-password/change-password.component.html index 383e5f88..87f66853 100644 --- a/Mohem/src/app/authentication/change-password/change-password.component.html +++ b/Mohem/src/app/authentication/change-password/change-password.component.html @@ -12,23 +12,37 @@ - + + + + + + + +
+
+

{{'changePassword,changePassword' | translate}}

+ + + - + - +

{{'changePassword,newPassword' | translate}}

+ + - - - + + - @@ -40,6 +54,6 @@
- {{ts.trPK('login','changepassword')}} +
\ No newline at end of file diff --git a/Mohem/src/app/authentication/change-password/change-password.component.scss b/Mohem/src/app/authentication/change-password/change-password.component.scss index e69de29b..baffb4ff 100644 --- a/Mohem/src/app/authentication/change-password/change-password.component.scss +++ b/Mohem/src/app/authentication/change-password/change-password.component.scss @@ -0,0 +1,31 @@ +.login-input { + border: none; +} +.item-input{ + --min-height: 1.0cm !important; + --border-radius: 12px; + --ion-color-base: white !important; + // --background: color: var(--darkgray) !important; + // background: #7f8c8d !important; + border-radius: 33px; + --border: solid #9999992b !important; + border: solid #9999992b !important; + margin-bottom :12px; + margin-left: 12px; + margin-right: 12px; +} + +.button-login{ + + --background: var(--newgreen) !important; + background: var(--newgreen) !important; + white-space: normal; + color: var(--light); + text-transform: capitalize; + min-height: 1.0cm; + --border-radius: 33px !important; + border-radius: 33px !important; + --min-height: 1.6cm !important; + width: 315px; +} + diff --git a/Mohem/src/app/authentication/change-password/change-password.component.ts b/Mohem/src/app/authentication/change-password/change-password.component.ts index ee3ece29..455ffffb 100644 --- a/Mohem/src/app/authentication/change-password/change-password.component.ts +++ b/Mohem/src/app/authentication/change-password/change-password.component.ts @@ -24,7 +24,8 @@ export class ChangePasswordComponent implements OnInit { public P_Confirm_NEW_PASSWORD : string; public P_OLD_PASSWORD : string; public P_USER_NAME : string; - + public logo = "assets/icon/login/lock.png"; + userData: any = {}; public isExpiredPwd: boolean = false; constructor( diff --git a/Mohem/src/app/authentication/check-user/check-user.component.html b/Mohem/src/app/authentication/check-user/check-user.component.html index fc6f99e2..5e53938b 100644 --- a/Mohem/src/app/authentication/check-user/check-user.component.html +++ b/Mohem/src/app/authentication/check-user/check-user.component.html @@ -8,10 +8,27 @@ - + + + + + + + +
+
+ + +

{{ts.trPK('login','check-user-text1')}}{{ts.trPK('login','check-user-text2')}} {{ts.trPK('login','check-user-text3')}}

+
+
+ + + + - {{ts.trPK('login','username')}} - + {{ts.trPK('login','check-user-text1')}} +
@@ -19,6 +36,6 @@
- {{ts.trPK('login','changepassword')}} +
\ No newline at end of file diff --git a/Mohem/src/app/authentication/check-user/check-user.component.scss b/Mohem/src/app/authentication/check-user/check-user.component.scss index 4357e11d..0628ac93 100644 --- a/Mohem/src/app/authentication/check-user/check-user.component.scss +++ b/Mohem/src/app/authentication/check-user/check-user.component.scss @@ -4,4 +4,38 @@ .btnBack{ background: transparent; -} \ No newline at end of file +} + +/////////////////////////////////////////////////////////// + +.login-input { + border: none; +} +.item-input{ + --min-height: 1.0cm !important; + --border-radius: 12px; + --ion-color-base: white !important; + // --background: color: var(--darkgray) !important; + // background: #7f8c8d !important; + border-radius: 33px; + --border: solid #9999992b !important; + border: solid #9999992b !important; + margin-bottom :12px; + margin-left: 12px; + margin-right: 12px; +} + +.button-login{ + + --background: var(--newgreen) !important; + background: var(--newgreen) !important; + white-space: normal; + color: var(--light); + text-transform: capitalize; + min-height: 1.0cm; + --border-radius: 33px !important; + border-radius: 33px !important; + --min-height: 1.6cm !important; + width: 315px; +} +/////////////////////////////////////////// \ No newline at end of file diff --git a/Mohem/src/app/authentication/check-user/check-user.component.ts b/Mohem/src/app/authentication/check-user/check-user.component.ts index d0b0579a..f0bd66a9 100644 --- a/Mohem/src/app/authentication/check-user/check-user.component.ts +++ b/Mohem/src/app/authentication/check-user/check-user.component.ts @@ -21,7 +21,8 @@ import {LoginComponent} from 'src/app/authentication/login/login.component'; export class CheckUserComponent implements OnInit { public P_USER_NAME : string; private loginData = new LoginModel(); - + public logo = "assets/icon/login/lock.png"; + @ViewChild(InternationalMobileComponent) internationlMobile: InternationalMobileComponent; constructor(public cs: CommonService, public authService: AuthenticationService, diff --git a/Mohem/src/app/authentication/confirm-login/confirm-login.component.html b/Mohem/src/app/authentication/confirm-login/confirm-login.component.html index 794c4955..ba09e11a 100644 --- a/Mohem/src/app/authentication/confirm-login/confirm-login.component.html +++ b/Mohem/src/app/authentication/confirm-login/confirm-login.component.html @@ -1,4 +1,4 @@ - + @@ -9,20 +9,28 @@ - - + + - + - - + + -

{{ts.trPK('login','verify-login-with')}}

+ + + + +

{{empname}}

+
+

{{ts.trPK('login','verify-login-with')}}

@@ -32,19 +40,32 @@
- - - + + + + + + + + + + + *ngIf="button.visible" + [buttonClass]="button.buttonClass" [pClass]="button.pClass"> + + + + +
- -
\ No newline at end of file + +
diff --git a/Mohem/src/app/authentication/confirm-login/confirm-login.component.scss b/Mohem/src/app/authentication/confirm-login/confirm-login.component.scss index e69de29b..eb5390a3 100644 --- a/Mohem/src/app/authentication/confirm-login/confirm-login.component.scss +++ b/Mohem/src/app/authentication/confirm-login/confirm-login.component.scss @@ -0,0 +1,10 @@ +.content-class { + height: 25vh; +} + +.rowOutside{ + // margin-top: -37px; + +} + + diff --git a/Mohem/src/app/authentication/confirm-login/confirm-login.component.ts b/Mohem/src/app/authentication/confirm-login/confirm-login.component.ts index fcb3a40e..e0310306 100644 --- a/Mohem/src/app/authentication/confirm-login/confirm-login.component.ts +++ b/Mohem/src/app/authentication/confirm-login/confirm-login.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Input } from '@angular/core'; import {ButtonSettings} from "src/app/hmg-common/ui/button/models/button-settingsl"; @@ -27,6 +27,8 @@ import { SMSCheckResponse } from "src/app/hmg-common/services/authentication/mod import { PushService } from 'src/app/hmg-common/services/push/push.service'; import { Platform } from '@ionic/angular'; +import { CheckUserAuthenticationResponse } from 'src/app/hmg-common/services/authentication/models/check-user-auth.response'; +import { LoginModel } from '../models/LoginModel'; @@ -44,7 +46,7 @@ import { Platform } from '@ionic/angular'; export class ConfirmLoginComponent implements OnInit { - public logo = "assets/imgs/CS.png"; + public logo = "assets/icon/login/password.png"; public buttons:any=[]; @@ -52,7 +54,7 @@ export class ConfirmLoginComponent implements OnInit { onlySMSBox: any = true; - loginData:any; + public loginData = new LoginModel(); selectedOption: any; @@ -62,7 +64,12 @@ export class ConfirmLoginComponent implements OnInit { deviceToken:any; - + @Input() accessFromOutSide = false; + @Input() visible = true; + username: any; + password:any; + loginType: any; + empname: string; constructor( @@ -90,11 +97,11 @@ export class ConfirmLoginComponent implements OnInit { this.loginData= this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false); - console.log(this.loginData); + console.log("logindata: "+this.loginData); - this.deviceToken= this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false); + this.deviceToken= this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false); - console.log("deviceToken :"+this.deviceToken); + console.log("deviceToken :"+this.deviceToken); //if device token undefind @@ -121,8 +128,9 @@ export class ConfirmLoginComponent implements OnInit { this.checkIfAvailable(); //**getSharedData of IMEI_USER_DATA and REGISTER_DATA_FOR_LOGIIN to set defult value **// - - + this.username = localStorage.getItem("user"); + this.password = localStorage.getItem("password"); + this.empname = localStorage.getItem("emp-name"); // this.setDefault(); @@ -214,7 +222,10 @@ export class ConfirmLoginComponent implements OnInit { disabled: this.isFaceorFinger === "finger" || this.isFaceorFinger === "biometric" ? false : true, - visible: this.onlySMSBox + visible: this.onlySMSBox, + buttonClass: 'buttonClassWhite', + pClass: 'pClassMyFileIconBlack', + class: 'nationalIdIcon', }, @@ -232,7 +243,10 @@ export class ConfirmLoginComponent implements OnInit { disabled: this.isFaceorFinger === "face" ? false : true, - visible: this.onlySMSBox + visible: this.onlySMSBox, + buttonClass: 'buttonClassWhite', + pClass: 'pClassMyFileIconBlack', + class: 'nationalIdIcon', }, @@ -248,7 +262,10 @@ export class ConfirmLoginComponent implements OnInit { value: 4, - visible: true + visible: true, + buttonClass: 'buttonClassWhite', + pClass: 'pClassMyFileIconBlack', + class: 'nationalIdIcon', }, @@ -264,7 +281,10 @@ export class ConfirmLoginComponent implements OnInit { value: 1, - visible: true + visible: true, + buttonClass: 'buttonClassWhite', + pClass: 'pClassMyFileIconBlack', + class: 'nationalIdIcon', } @@ -278,6 +298,7 @@ export class ConfirmLoginComponent implements OnInit { confirm(el: any) { + console.log("confirm:"+ el ); this.selectedOption = this.selectedOption && !this.onlySMSBox ? this.selectedOption : el.value; @@ -286,13 +307,15 @@ export class ConfirmLoginComponent implements OnInit { case 1: - console.log(el.value); - + console.log(el.value); + localStorage.setItem("login-type",el.value); + console.log("login-type: "+ localStorage.getItem("login-type")) this.loginWithSMS(el); break; case 2: + localStorage.setItem("login-type",el.value); console.log(el.value); @@ -303,6 +326,7 @@ export class ConfirmLoginComponent implements OnInit { break; case 3: + localStorage.setItem("login-type",el.value); console.log(el.value); @@ -316,6 +340,7 @@ export class ConfirmLoginComponent implements OnInit { console.log(el.value); + localStorage.setItem("login-type",el.value); this.loginWithWhatsapp(el); @@ -335,7 +360,7 @@ export class ConfirmLoginComponent implements OnInit { AuthenticationService.LAST_LOGIN ); - + } @@ -460,7 +485,7 @@ export class ConfirmLoginComponent implements OnInit { this.cs.sharedService.setSharedData({ - MobileNumber: this.loginData.mobileNumber, + MobileNumber: this.loginData.MobileNumber, loginType: this.selectedOption @@ -651,7 +676,7 @@ export class ConfirmLoginComponent implements OnInit { if ( result.Mohemm_GetPatientID_List[0].LoginType == 2 || result.Mohemm_GetPatientID_List[0].LoginType == 3) { this.loginTokenID = result.LogInTokenID; - + //send silent sms this.checkSMS(); } else { @@ -712,11 +737,13 @@ export class ConfirmLoginComponent implements OnInit { this.authService.setAuthenticatedUser(result).subscribe(() => { console.log("insert"); - + localStorage.setItem("emp-name",result.MemberInformationList[0].EMPLOYEE_NAME); + console.log("empnmae: "+ localStorage.getItem("emp-name")); if (this.platform.is("cordova")) { - + this.insertMobileLogin(); + } this.cs.openHome(); @@ -785,6 +812,77 @@ console.log("succssful insertMobileLoginInfo" ); } +//do silent login +private checkUserAuthentication() { + console.log("debug Here!!"); + this.cs.startLoading(); + const request = new LoginRequest(); + request.P_USER_NAME = this.username; + request.P_LANGUAGE = "US";//this.language; + request.P_PASSWORD = this.password; + console.log(request); + this.authService + .login(request, () => { + console.log("error here"); + //console.log(result.MessageStatus); + //this.sharedData.setSharedData(true, Password.IS_EXPIRED_PSW); + //this.userCheck(); + }, this.ts.trPK("general", "ok")) + .subscribe((result: CheckUserAuthenticationResponse) => { + console.log("success"); + this.cs.stopLoading(); + if (this.cs.validResponse(result)) { + + console.log("result.LogInTokenID "+ result.LogInTokenID); + console.log("this.loginData before "+ this.loginData); + this.loginData = new LoginModel(); + console.log("this.loginData after "+ this.loginData); + + this.loginData.LogInTokenID = result.LogInTokenID; + this.loginData.MobileNumber = result.MemberLoginList.P_MOBILE_NUMBER; + this.loginData.P_USER_NAME = this.username; + this.sharedData.setSharedData(this.loginData, AuthenticationService.LOGIN_DATA); + this.cs.sharedService.setSharedData(this.loginData.P_USER_NAME, LoginRequest.SHARED_DATA); + //this.remeberMyInfo(); + //this.cs.openSMSPage(); phase#1 one type of OTP + // if(!this.welcomeBack){ + //this.cs.openConfirmLoginPage();//phase#2 add 4 types for OTP + // } + this.confirm(this.loginType); + + + } else { + console.log("result.IsPasswordExpired"); + console.log(result.IsPasswordExpired); + if (result.IsPasswordExpired) { + // alert("dont forget to handelpresentPasswordExpiredDialog() "); + // this.presentPasswordExpiredDialog(); ***** + } + } + }); +} + +checkAccess(el:any){ + let data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false); + + this.loginType=el; + + if(this.accessFromOutSide){ + // alert("this.accessFromOutSide" + this.accessFromOutSide); + this.checkUserAuthentication(); + } + else{ + // alert("this.accessFromOutSide" + this.accessFromOutSide); + if(!data == undefined ){ + // alert("data.LogInTokenID" + data.LogInTokenID); + + this.confirm(this.loginType); + } + else{ + this.checkUserAuthentication(); + } +} +}//end checkAccess }​ \ No newline at end of file diff --git a/Mohem/src/app/authentication/forgot/forgot.component.html b/Mohem/src/app/authentication/forgot/forgot.component.html index 9e46cdb7..1ca189d0 100644 --- a/Mohem/src/app/authentication/forgot/forgot.component.html +++ b/Mohem/src/app/authentication/forgot/forgot.component.html @@ -10,20 +10,30 @@ - + + - + + + + + + +
+
+ + {{'changePassword,newPassword' | translate}} - - + {{'changePassword,confirmPassword' | translate}} - @@ -35,6 +45,6 @@
- {{ts.trPK('login','changepassword')}} +
\ No newline at end of file diff --git a/Mohem/src/app/authentication/forgot/forgot.component.ts b/Mohem/src/app/authentication/forgot/forgot.component.ts index 96a05ce2..95c8789f 100644 --- a/Mohem/src/app/authentication/forgot/forgot.component.ts +++ b/Mohem/src/app/authentication/forgot/forgot.component.ts @@ -21,6 +21,8 @@ export class ForgotComponent implements OnInit { public P_NEW_PASSWORD: string; public P_Confirm_NEW_PASSWORD : string; public P_USER_NAME : string; + public logo = "assets/icon/login/lock.png"; + constructor( public cs: CommonService, public authService: AuthenticationService, diff --git a/Mohem/src/app/authentication/login/login.component.html b/Mohem/src/app/authentication/login/login.component.html index 70e2c0ad..6fe8bcb5 100644 --- a/Mohem/src/app/authentication/login/login.component.html +++ b/Mohem/src/app/authentication/login/login.component.html @@ -1,28 +1,57 @@ - + + + +
+ + +
+
+
+ + + +
+ + + + + + + + + + + - +

{{ts.trPK('login','login')}}

- - +
+ - + - + - + + + + {{ts.trPK('login','remeber-me')}} @@ -39,13 +68,33 @@
+ + + + + + + + + + + + + +
- +
- {{ts.trPK('login','login')}} +

-
+ + + + + + + \ No newline at end of file diff --git a/Mohem/src/app/authentication/login/login.component.scss b/Mohem/src/app/authentication/login/login.component.scss index 8b4cbf03..da05689e 100644 --- a/Mohem/src/app/authentication/login/login.component.scss +++ b/Mohem/src/app/authentication/login/login.component.scss @@ -110,3 +110,121 @@ img.centerDiv { } +.login-input { + border: none; +} + +.item-input{ + --min-height: 1.0cm !important; + --border-radius: 12px; + --ion-color-base: white !important; + // --background: color: var(--darkgray) !important; + // background: #7f8c8d !important; + border-radius: 33px; + --border: solid #9999992b !important; + border: solid #9999992b !important; + margin-bottom :12px; + margin-left: 12px; + margin-right: 12px; +} + +.button-login{ + + --background: var(--newgreen) !important; + background: var(--newgreen) !important; + white-space: normal; + color: var(--light); + text-transform: capitalize; + min-height: 1.0cm; + --border-radius: 33px !important; + border-radius: 33px !important; + --min-height: 1.6cm !important; + width: 315px; +} +.content { + width: 500px; + margin-left: auto; + margin-right: auto; +} +.first-circle { + background: var(--newgreen) !important; + border-radius: 50%; + height: 292px; + width: 288px; + float: left; + margin-left: -55px; + margin-top: -140px; + +} +.middle-circle { + position: relative; + background:var(--darkblue) !important; + border-radius: 50%; + height: 160px; + width: 170px; + margin: -115px 0px 0px 179px; +} +.last-circle { + position: inherit; + background: var(--lightblue) !important; + border-radius: 50%; + height: 166px; + width: 140px; + margin: -147px 0px 0px 274px; +} + +.logoFotor { + width: 45px !important; + height: 45px !important; + +} + +.welcomeText{ + justify-content: center; + align-items: center; + text-align: left; + font-size: 26px; + font-weight: bold; + color: #f2f2f2; + margin-top: 178px; + margin-left: 48px; +} + +.forgetText{ + background: transparent; + color: var(--darkblue) !important; +} + + +@media only screen and (max-width: 980px) { + .content{width:100%;} +} + + +.circle1{ + width: 15%; + padding-top: 15%; + margin:0 42%; + background-color: black; + border-radius: 50%; + display:inline-block; + } + .circle2{ + width: 15%; + padding-top: 15%; + margin-left: 20%; + background-color:darkred; + border-radius: 50%; + display:inline-block; + margin-top:20px; + } + .circle3{ + width: 15%; + padding-top: 15%; + margin-left: 26%; + background-color:gold; + border-radius: 50%; + display:inline-block; + margin-top:20px; + margin-right: 15%; + } \ No newline at end of file diff --git a/Mohem/src/app/authentication/login/login.component.ts b/Mohem/src/app/authentication/login/login.component.ts index 7e05e0b5..31836e98 100644 --- a/Mohem/src/app/authentication/login/login.component.ts +++ b/Mohem/src/app/authentication/login/login.component.ts @@ -39,6 +39,12 @@ export class LoginComponent implements OnInit, OnDestroy { private isMobileFingerPrint: boolean; private FingerPrintPatientIdentificationID: string; private loginData = new LoginModel(); + private empname:any; + private logintype:any; + public loginDiv:boolean =true; + public welcomeBack:boolean =false; + public logo = "assets/icon/login/password.png"; + constructor( public cs: CommonService, @@ -56,11 +62,21 @@ export class LoginComponent implements OnInit, OnDestroy { ) { } ngOnInit() { - + this.username = localStorage.getItem("user"); this.password = localStorage.getItem("password"); let remember = localStorage.getItem("remember"); + this.empname= localStorage.getItem("emp-name"); + this.logintype= localStorage.getItem("login-type"); if (remember == "true") { this.remeberMe = true } else { this.remeberMe = false } + if(this.username || this.empname){ + this.loginDiv=false; + this.welcomeBack=true; + + }else{ + this.loginDiv=true; + this.welcomeBack=false; + } // alert("user>>" + this.username); // alert("pass>>>" + this.password); // alert("remember>>>" + this.remeberMe); @@ -91,7 +107,7 @@ export class LoginComponent implements OnInit, OnDestroy { public addValue(e): void { // console.log(e.currentTarget.checked); - this.remeberMe = e.currentTarget.checked; + this.remeberMe = true;//e.currentTarget.checked; this.remeberMyInfo(); } public remeberMyInfo() { @@ -107,6 +123,7 @@ export class LoginComponent implements OnInit, OnDestroy { } public onLogin() { + console.log("onLogin"); this.checkAppUpdated(); // this.checkUserAuthentication(); } @@ -165,7 +182,9 @@ export class LoginComponent implements OnInit, OnDestroy { this.cs.sharedService.setSharedData(this.loginData.P_USER_NAME, LoginRequest.SHARED_DATA); this.remeberMyInfo(); //this.cs.openSMSPage(); phase#1 one type of OTP + // if(!this.welcomeBack){ this.cs.openConfirmLoginPage();//phase#2 add 4 types for OTP + // } } else { @@ -250,4 +269,18 @@ export class LoginComponent implements OnInit, OnDestroy { }); } + login() { + console.log("login emit"); + console.log("login"); + // this.checkUserAuthentication(); + this.loginDiv=true; + this.welcomeBack=false; + } + + + loginWithUser() { + console.log("loginWithUser") + this.cs.openConfirmLoginPage(); + } + } diff --git a/Mohem/src/app/authentication/sms-page/sms-page.page.html b/Mohem/src/app/authentication/sms-page/sms-page.page.html index 5eca319e..c3a81c18 100644 --- a/Mohem/src/app/authentication/sms-page/sms-page.page.html +++ b/Mohem/src/app/authentication/sms-page/sms-page.page.html @@ -10,13 +10,19 @@ - - + + + + +
+
-

{{'verificationcode,title' | translate}}{{'verificationcode,verificationcode' | translate}} {{'verificationcode,by' | translate}}{{'verificationcode,sms' | translate}}{{'verificationcode,instruct' | translate}}{{'general,submit' | translate}}

+

{{'verificationcode,verificationcode' | translate}}

+
+

{{'verificationcode,title' | translate}}{{'verificationcode,verificationcode' | translate}} {{'verificationcode,by' | translate}}{{'verificationcode,sms' | translate}}{{'verificationcode,instruct' | translate}}{{'general,submit' | translate}}

@@ -25,15 +31,34 @@

{{displayTime}}



- - - + + + + + + + + + + + + + + + +
+
- {{'general,submit' | translate}} +
\ No newline at end of file diff --git a/Mohem/src/app/authentication/sms-page/sms-page.page.scss b/Mohem/src/app/authentication/sms-page/sms-page.page.scss index 5f1c67eb..78c9db1f 100644 --- a/Mohem/src/app/authentication/sms-page/sms-page.page.scss +++ b/Mohem/src/app/authentication/sms-page/sms-page.page.scss @@ -18,4 +18,51 @@ h1{ span{ font-weight: bold; -} \ No newline at end of file +} +.button-login{ + + --background: var(--newgreen) !important; + background: var(--newgreen) !important; + white-space: normal; + color: var(--light); + text-transform: capitalize; + min-height: 1.0cm; + --border-radius: 33px !important; + border-radius: 33px !important; + --min-height: 1.6cm !important; + width: 315px; +} + +.leftDiv { + margin: auto; + text-align: left; + display: block; +} + +.sms_code{ + margin: 0px; + text-align: center; +} + +ion-input { + margin: 0 5px; + text-align: center; + line-height: 0; + font-size: 32px; + //border: solid 1px #ccc; + border: solid 0.01cm #000000; + //box-shadow: 0 0 5px #ccc inset; + outline: none; + width: 20%; + transition: all .2s ease-in-out; + border-radius: 3px; + display: inline-block; + &:focus { + border-color:var(--ion-color-secondary) !important; + box-shadow: 0 0 5px var(--ion-color-secondary) !important inset; + } + + &::selection { + background: transparent; + } + } \ No newline at end of file diff --git a/Mohem/src/app/authentication/sms-page/sms-page.page.ts b/Mohem/src/app/authentication/sms-page/sms-page.page.ts index 825f64fd..96242ca3 100644 --- a/Mohem/src/app/authentication/sms-page/sms-page.page.ts +++ b/Mohem/src/app/authentication/sms-page/sms-page.page.ts @@ -75,6 +75,12 @@ export class SmsPageComponent implements OnInit { public loginTypeData:any; + public logo = "assets/icon/login/password.png"; + + public smc_code: any = []; + code: any; + + constructor( public navCtrl: NavController, @@ -258,16 +264,17 @@ export class SmsPageComponent implements OnInit { } checkVerificationCode() { + this.code=this.smc_code.join(''); if (this.count < 3) { if ( - this.activationCode == undefined || + this.code == undefined || - this.activationCode == null || + this.code == null || - this.activationCode == "" + this.code == "" ) { @@ -282,7 +289,7 @@ export class SmsPageComponent implements OnInit { this.checkForgetPwdSMS(); } else { - + console.log("checkSMS"); this.checkSMS(); } @@ -304,7 +311,7 @@ export class SmsPageComponent implements OnInit { public checkSMS() { // alert("checkSMS in page") - + console.log("code" + this.code); const data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false); const request = new SMSCheckRequest(); @@ -313,7 +320,7 @@ export class SmsPageComponent implements OnInit { request.LogInTokenID = data.LogInTokenID; - request.activationCode = this.activationCode; + request.activationCode = this.code; //code;this.activationCode; request.P_USER_NAME = data.P_USER_NAME; @@ -336,15 +343,17 @@ export class SmsPageComponent implements OnInit { this.authService.setAuthenticatedUser(result).subscribe(() => { //call insert Mobile Login - - + console.log("insert"); + localStorage.setItem("emp-name",result.MemberInformationList[0].EMPLOYEE_NAME); + console.log("empnmae: "+ localStorage.getItem("emp-name")); if (this.platform.is("cordova")) { + // localStorage.setItem("full-name", result.P_USER_NAME); this.insertMobileLogin(); } - + this.common.openHome(); @@ -417,7 +426,7 @@ console.log("successful insertMobileLogin" ); request.LogInTokenID = data.LogInTokenID; - request.activationCode = this.activationCode; + request.activationCode =this.code;// this.activationCode; request.P_USER_NAME = data.P_USER_NAME; @@ -457,6 +466,53 @@ console.log("successful insertMobileLogin" ); }); + } + onChange() { + const filtered = this.smc_code.filter(function (el) { + if (el) { + return el; + } + }); + if (filtered.length === 4) { + //this.validate(); + console.log("validate"); + this.checkVerificationCode(); + } + } + + goToNextInput(e) { + // let value = e.target.value; + // if (value.length === 1) { + const key = e.which; + const t = e.target; + let sib = t.nextElementSibling; + + if (key !== 9 && (key < 48 || key > 57)) { + if (key === 8 || key === 46) { + return true; + } else { + e.preventDefault(); + return false; + } + } + + if (key === 9) { + return true; + } + + if (sib) { + //sib = document.querySelector('input'); + if (e.target.value) { + sib.setFocus(); + } + } + // } else { + // e.target.value = value.substring(0, value.length - 1); + // } + + + + } } \ No newline at end of file diff --git a/Mohem/src/app/authentication/welcome/welcome.component.html b/Mohem/src/app/authentication/welcome/welcome.component.html new file mode 100644 index 00000000..77efcb65 --- /dev/null +++ b/Mohem/src/app/authentication/welcome/welcome.component.html @@ -0,0 +1,3 @@ +

+ welcome works! +

diff --git a/Mohem/src/app/authentication/welcome/welcome.component.scss b/Mohem/src/app/authentication/welcome/welcome.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/Mohem/src/app/authentication/welcome/welcome.component.spec.ts b/Mohem/src/app/authentication/welcome/welcome.component.spec.ts new file mode 100644 index 00000000..908ca625 --- /dev/null +++ b/Mohem/src/app/authentication/welcome/welcome.component.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WelcomeComponent } from './welcome.component'; + +describe('WelcomeComponent', () => { + let component: WelcomeComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ WelcomeComponent ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(WelcomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/authentication/welcome/welcome.component.ts b/Mohem/src/app/authentication/welcome/welcome.component.ts new file mode 100644 index 00000000..a6048d5b --- /dev/null +++ b/Mohem/src/app/authentication/welcome/welcome.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-welcome', + templateUrl: './welcome.component.html', + styleUrls: ['./welcome.component.scss'], +}) +export class WelcomeComponent implements OnInit { + + constructor() { } + + ngOnInit() {} + +} diff --git a/Mohem/src/app/hmg-common/hmg-common.module.ts b/Mohem/src/app/hmg-common/hmg-common.module.ts index 520715e4..7f1d400b 100644 --- a/Mohem/src/app/hmg-common/hmg-common.module.ts +++ b/Mohem/src/app/hmg-common/hmg-common.module.ts @@ -99,7 +99,9 @@ import {File} from '@ionic-native/file/ngx'; import {FileUploderProfileComponent} from './ui/file-uploder-profile/file-uploder-profile.component' import { OpenNativeSettings } from '@ionic-native/open-native-settings/ngx'; import { AccordinCustomComponent } from './ui/accordin-custom/accordin-custom.component'; -import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-custom/accordin-tab-custom.component' +import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-custom/accordin-tab-custom.component'; +import{ConfirmLoginComponent} from '../authentication/confirm-login/confirm-login.component' +import{WelcomeComponent} from './ui/welcome-login/welcome.component' @NgModule({ imports: [ CommonModule, @@ -112,6 +114,7 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus PdfViewerModule ], declarations: [ + WelcomeComponent, NumberRangeComponent, SSpacerComponent, MSpacerComponent, @@ -165,9 +168,12 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus WorkListAttachViewComponent, FileUploderProfileComponent, AccordinTabCustomComponent, - AccordinCustomComponent + AccordinCustomComponent, + ConfirmLoginComponent + ], exports: [ + WelcomeComponent, NumberRangeComponent, SSpacerComponent, MSpacerComponent, @@ -218,7 +224,9 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus WorkListAttachViewComponent, FileUploderProfileComponent, AccordinTabCustomComponent, - AccordinCustomComponent + AccordinCustomComponent, + ConfirmLoginComponent + ], providers: [ ConnectorService, diff --git a/Mohem/src/app/hmg-common/services/authentication/models/smscheck.response.ts b/Mohem/src/app/hmg-common/services/authentication/models/smscheck.response.ts index c6a5352f..660b8a28 100644 --- a/Mohem/src/app/hmg-common/services/authentication/models/smscheck.response.ts +++ b/Mohem/src/app/hmg-common/services/authentication/models/smscheck.response.ts @@ -16,5 +16,6 @@ export class SMSCheckResponse extends Response { public CompanyImageDescription:string; public CompanyImageURL:string; public EMPLOYEE_MOBILE_NUMBER:string; + public EMPLOYEE_NAME:string; } diff --git a/Mohem/src/app/hmg-common/ui/button/button.component.scss b/Mohem/src/app/hmg-common/ui/button/button.component.scss index f62e14ac..5fc4ac29 100644 --- a/Mohem/src/app/hmg-common/ui/button/button.component.scss +++ b/Mohem/src/app/hmg-common/ui/button/button.component.scss @@ -6,7 +6,7 @@ box-shadow: 0px 0px 8px 2px #d5d5d5ab; background: white; margin-bottom: 0.3cm; - border-color: #ececec; + // border-color: #ececec; border-style: solid; border-width: 0.02cm; } diff --git a/Mohem/src/app/hmg-common/ui/button/button.component.ts b/Mohem/src/app/hmg-common/ui/button/button.component.ts index a88d0184..9f6305b2 100644 --- a/Mohem/src/app/hmg-common/ui/button/button.component.ts +++ b/Mohem/src/app/hmg-common/ui/button/button.component.ts @@ -13,6 +13,8 @@ export class ButtonComponent implements OnInit { @Input() class: any = ''; @Input() icon: string; @Input() title: string; + @Input() buttonClass: any = ''; + @Input() pClass: any = ''; @Output() trigger = new EventEmitter(); @Input() settings: ButtonSettings; public direction: string; diff --git a/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.html b/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.html new file mode 100644 index 00000000..b58e0af1 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.html @@ -0,0 +1,69 @@ + + + + + +

{{'home,welcome-back' | translate}}

+

{{empname}}

+

{{welcome_txt}}

+

{{txt_account}}

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + {{'rate,yes' | translate}} + + + + + + + \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.scss b/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.scss new file mode 100644 index 00000000..2f287ba3 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.scss @@ -0,0 +1,68 @@ +.logo-en { + text-align: left; +} + +.logo-ar { + text-align: right; +} + +.welcome { + margin: 10px; + display: inline-block; + font-weight: bold; + font-size: 0.55cm; +} + +.description { + margin-top: .5cm; +} + +.last-login { + margin: 0; + font-size: 12px; + text-align: center; +} + +.row-border { + margin-top: 20px; + border: 1px solid #bbbbbb; + border-radius: 10px; + padding: 5px; + background: #dddddd; +} + + +.fadein { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +.small-font-size { + font-size: 14px; + ; +} + +.bottom-buttons { + margin-bottom: 0; +} + +@-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +.welcome-footer { + position: fixed; + bottom: 10px; + left: 0; + right: 0; +} + +.text1 { + line-height: 1.5; +} \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.spec.ts b/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.spec.ts new file mode 100644 index 00000000..908ca625 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WelcomeComponent } from './welcome.component'; + +describe('WelcomeComponent', () => { + let component: WelcomeComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ WelcomeComponent ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(WelcomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.ts b/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.ts new file mode 100644 index 00000000..df42e2cb --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/welcome-login/welcome.component.ts @@ -0,0 +1,182 @@ +import { + Component, + OnInit, + Output, + EventEmitter, + AfterViewInit, + ViewChild, + OnDestroy +} from "@angular/core"; +import { TranslatorService } from "../../services/translator/translator.service"; +import { CommonService } from "../../services/common/common.service"; +import { AuthenticationService } from "../../services/authentication/authentication.service"; +import { ConfirmLoginComponent } from 'src/app/authentication/confirm-login/confirm-login.component'; + +import * as moment from 'moment' +import { ButtonSettings } from '../button/models/button-settingsl'; +import { Events } from '@ionic/angular'; + +@Component({ + selector: "welcome-login", + templateUrl: "./welcome.component.html", + styleUrls: ["./welcome.component.scss"] +}) +export class WelcomeComponent implements OnInit, AfterViewInit, OnDestroy { + @ViewChild(ConfirmLoginComponent, {read: ConfirmLoginComponent }) confimLogin: ConfirmLoginComponent; + + // @ViewChild(ConfirmLoginComponent, { static: false, read: ConfirmLoginComponent }) confimLogin: ConfirmLoginComponent; + public logo = "assets/imgs/bell.png"; + public direction: any; + public user: any; + public count: number = 0; + public count2: number = 0; + public txt_account: any; + public isLastLogin: any; + public welcome: string; + public userName: string; + public lastLoginTime: any; + public welcome_txt: any; + + // public loginTypeDef = { + // 1: this.ts.trPK("sms", "title"), + // 2: this.ts.trPK("sms", "fingerprint"), + // 3: this.ts.trPK("sms", "face-recognition"), + // 4: this.ts.trPK("sms", "whatsapp") + // }; + public loginTypeDef = { + 1: this.ts.trPK("sms", "title"), + 2: this.ts.trPK("sms", "fingerprint"), + 3: this.ts.trPK("sms", "face-recognition"), + 4: this.ts.trPK("sms", "whatsapp") + }; + @Output() onLogin = new EventEmitter(); + @Output() loginWithUser = new EventEmitter(); + + public button = + { + title: "login, more-verify", + url: null, + icon: "assets/imgs/more.png", + settings: new ButtonSettings(true, true, true, true), + value: 2, + txt: 'More', + disabled: false, + buttonClass: 'buttonClassWhite', + pClass: 'pClassMyFileIconBlack', + class: 'nationalIdIcon', + visible: true + }; + password: string; + empname: string; + logintype: any; + + constructor( + public ts: TranslatorService, + public cs: CommonService, + public authservice: AuthenticationService, + public events: Events + ) { } + + ngOnInit() { + // retrive user info ** + + this.userName = localStorage.getItem("user"); + this.password = localStorage.getItem("password"); + let remember = localStorage.getItem("remember"); + this.empname= localStorage.getItem("emp-name"); + this.logintype= localStorage.getItem("login-type"); + this.logintype = parseInt(this.logintype) + + this.welcome_txt = this.ts.trPK("home", "welcome-txt"); + + this.txt_account = this.user + ? this.ts.trPK("home", "account-info") + : ""; + + + + this.setWelcomeMessage(); + this.setDescription(); + //later to fix below code + if (this.user) { + // this.lastLoginTime = moment(this.cs.evaluteDateAsObject(this.user.EditedOn)).format("HH:mm"); + } + } + + ngOnDestroy(): void { + + } + + private setWelcomeMessage() { + console.log(this.userName + "this.userName"); + + if (this.userName) { + this.welcome = this.ts.trPK("home", "welcome-back"); + console.log(this.welcome + "this.welcome"); + + this.welcome += " " + this.empname || ''; + this.isLastLogin = true; + console.log(this.isLastLogin + "this.isLastLogin"); + } else { + this.welcome = this.ts.trPK("home", "welcome-head"); + + } + } + + private setDescription() { + this.txt_account = this.userName ? + this.ts.trPK("home", "account-info") :""; + } + + ngAfterViewInit() { + console.log("this.confimLogin.buttons[0]" + this.confimLogin.buttons[0]); + setTimeout(() => { + if (this.userName && this.confimLogin.buttons[0]) { + + console.log(this.userName ); + console.log(this.confimLogin.buttons[0]); + + this.confimLogin.buttons[0].forEach(element => { + if (this.logintype === element.value) { + console.log(this.logintype ); + console.log(element.value); + console.log("this.logintype === element.value"); + + element.visible = true; + } else { + console.log("this.logintype != element.value"); + + element.visible = false; + } + + }); + } + }, 200); + } + + public moreLoginOptions() {} + + + + login() { + this.onLogin.emit(); + } + loginwithuser() { + this.loginWithUser.emit(); + } + + + + // getDate(date: string) { + // return this.cs.getDateTimeISOFromString(date); + // } + getLoginType(type: any) { + return this.loginTypeDef[type]; + } + + convertTime(time) { + // alert(time) + return time; + } + +} diff --git a/Mohem/src/assets/icon/login/lock.png b/Mohem/src/assets/icon/login/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..eb5bea3523de18e8265a8ede972d12415f30a603 GIT binary patch literal 2333 zcmb`JYdjNd1I9PPCPU0=Eyo;lh>+tlk{L=)u?`Gn3q2!*tQ-(MLc-jUc2onSV01#W$Nhhuca+M6? z=bnX(jsUI!uRGaT0xJ69v)qf(Wp~>v4h{efZUzB>iFm-iy(e73xB>up3VHq|frY&P z=H$I{Ljfqwon_meM7o3n=gC;7F+*sy@|W$4k+DA^=qrM^mwr_aYAdLA2ghcJ-+2rO zj%A8l6q0u0<~?WZyTJ{Q3VRk-FvNkv_au+Ll*6NulMyPNQc6y+dje!vUHMu(wBSFY1)pn2Eqh67Q^m7vow@|yHtU!ztlaR5 z0Kmn}#zH=Tolt{T1E?3ri#h9}#?KUNoB31Wo)P?Dt<68vM|+m@(4{>Zl2djvxl#SC zf&(2Ra6q#~nb3ETAO`R1y@W;?gOPS3lHnI<>!TSHd_V}+)&u@xXp4aWP}=4sFsn-; z<~<)iffPh8NQ_!X-YKSy73}CE=AJY)=taie-zGj+&5aZgZjB@pD3=6^aZgzxEjo$H zvsSvM$ER(Q#EPLYl;&qLdFxwBh;ZUerL$f8H^=_LBkG-}>>lelWPKvL;;8I{yRP9R;OyVju z8eeiT#((HQ1iDoezB*+4xOq@?)TEA|9%AxLL}`X)s&VtL>5V2=0^J~;n!kUh{p7cj zXxFT9WVL>Lag-ZMy7Syu(9ZE$u|I--NO*&_{%+a*;T(M2^Wt|dtE|wrD zsxWu4o>TPkWsZGhT!Nf-kXe6z9f%!&-?ezmure={H0?JrwlzbA^YIg37|X7A?_XYI zoApNA+kVv`)s{1|uwS}2-C=Qv9nPz{eM4>q*w_7R;diFgx6gc-bzk%nE6#BuK>is= zTqMHS4>+MB+x9X@az=qyhso@10@2!gOc~GnJ$@oPbj9V2d+1RDiw=vKAiLl z`(3u@6J>rDIG0}!2_o#SaUDj)nvair8D$=ls`^; zUeDloi!eIV$fB$-Bz}&~bnCu3tJT~htfNIMOYxtj2cG@vtJK#)wh~A8YhH$ElLp@l zs3+D+e22qMhgM4%c7zaX;AE@)XP4glewT&WAE6e}m{ap`3?s}2hmlt~GtIm^tBMMe z!DP6z=l?KJ z#^Mi`t!S0kL1R{KVP&W!4^5NjwULgCrhu|>9<|U!ro6eFi+*&r4y$4};<6)HPhW$k5v*5}tXHy61}5Po zVJw5OmT`#{N)s$iek4SHBBX&#I2G?=eLBJIEPt-N71i>oqMtpJ@OEpQV5j9?vAWs! z_IU><$BXnzs{Xfjhlh^m`FH0;+oX#QPVDHXjglvxJm@hqzhey}=eaLr!`El|>#Nk= zoojo4%GCcPFr1+Q>8xTFF~@-svE^N@a0&dt$f$~0SXuR{O|%VpZ241{^SF)dVG6bp zv5o&xBV2_R5Fo0J*^mxXK8N*G#dO4?lc_&8;)eQBrpIqj;JPmrB;Qca z*VG@2v+wO3@@eCoFH!Wr4B`^#&TWEJ+IaUfk+=elf>#SK$FZ1R0X(iGd|w_a$gIKm z#IcxY#1FZF|8j9JJD!mmaiOH!Rk( zn8N?iG3g!4dn7;yhI81w(*AqjHCbMNJ3>Eo-SHb@;E_@JM>S2zqg0Pst7Str@&P zjotdibPHNDsCM5=vY&tYhfQ(zSm>I;bLs!KVQVc;)P>dT#M-Bgm88yze-ee8oD*vs z8Y@e!xh!E-`iAGRl(u8`0i|qJDz?fjcrAgfgu-#(kKVs1CW`+ENK`LA_^sG{cixW^vMKYoj5VM WljSw-=+(6MO|i8;eX_#REB0@h-B9lU literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/login/password.png b/Mohem/src/assets/icon/login/password.png new file mode 100644 index 0000000000000000000000000000000000000000..1d51b475d99ca23c3c42c4aec8b0bb7cb6f3a36c GIT binary patch literal 4809 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 U+CO0T5C8xG07*qoM6N<$f)JR_od5s; literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/imgs/header.png b/Mohem/src/assets/imgs/header.png new file mode 100644 index 0000000000000000000000000000000000000000..9a501524ee66851c520146953f1f7f3c38d945db GIT binary patch literal 21633 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 literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/imgs/more.png b/Mohem/src/assets/imgs/more.png index ad56785f8e0ff1c01bd151cfa4c85f3116d8e6d1..5b08ed3b1f1979bbd2b6c4b03a4e3a8bea2648eb 100644 GIT binary patch literal 568 zcmeAS@N?(olHy`uVBq!ia0vp^EN^5+IfWVg?4L1x#=emj%plwg5;{uc@OCsCb>Hi(^Ox=iaG}zK0D& zTr`DKT5=rRPOzmgZ(_X3Va%A?+#{ftVXh#3V7HcQm{fay{SnXQe{Plk|Fd?B?VY=e zl3sF}397%+j$fJnqV<>kA+c3rQw$G%U;6B!Q|oP0Z}(>5KerZsTlzWSz@F(JPyXAi z&al3En#1J1&g;I%aq-ujIZ>&7hC@g%h#pT?)nyxALn@y@R)ul7ZKfAS(bp;6trc>b5Rioy?O20#8QJ0G`r z;p7&|=i|0Mbo_WL)0b_?%~N vz<<7N0b30Y3bIwS#f6x>Soo`Z|G7`RyfuvnPHtC72F0MKtDnm{r-UW|oCohB literal 1867 zcmbVNO=#p)98VPoEwqTTDl2Np9_-S6`JOZhn=S23-5J=_GCN{>>zkK1GoeXdHc2}( zz36r?7D4=2!IL10AfhbzaoNLyC?YO+@vt|&>cy)EaeXf{lTKxJEe>Sz^4{&dr{lyfy&m2%wtx9pjDcX9q{jw>Db&CP7n zy<{U2iqIo1EcU~gqB-vTazBP>2WNZ>cl^i^{|sM)ie}7X5OBZkENiB=vedv8Rb7 z=}3xYS(2hdZ@s~yGf9Xdq~0o4sn#F6sr{2xJxpUcF8@ci{)biG_Vk~~ag~*SX zA7>|a;VR6qBQOMzRiLO%rEJTFt?G-iX3O#r>Jray52ivbTTzZdY2A1*gZ~NkkliLp z2&vb82s>DcqmIBAv9v2BAPE(w)@hUT^-5(UA#FdP3u)uxDqml#7>Z>WKoynTT-UYh zQJTRB;d<2(XoN)H_w2H2TDn(MqU{~gdsLr?H?&OaX-5R2RKPbO|=R;qfy{b1Te>}!;r>F6vfF9 z<|~Y5xFXTr66>WQk#rBKyrAuxpVCqrj07*^D@W3K4cid0-gE@SiV}MQKb-cbWaLD? zkM{Svn3CS7PKPonX=go{;FS)|-pQJQxzD_(!8`6j3is}B|H&$9NIKR2$>#ar_K&Pa zT^MyRJ@O@?Na!#<(!Vp8Cwt-`9p|5(&TLp*3-qJ7Sa3wC6MAhtpFQv+y>dvsy3(v2 zqQCCmU49VEJnp*BeYO4b!3S{W!`p9vGhZr|o?Lk4r+41_dp4N;;ic~vzWC@-XYuBR z!{2_n_VL;4SFgfT*6%kSdh4};Ctknv?73F;6Lfv6(Y^iZ>96nT>YJawapg<> e8Ab}XXSmlsljaWJKXr{=clEXP>gTK52mb(ZMN-fJ diff --git a/Mohem/src/assets/imgs/more2.png b/Mohem/src/assets/imgs/more2.png new file mode 100644 index 0000000000000000000000000000000000000000..ad56785f8e0ff1c01bd151cfa4c85f3116d8e6d1 GIT binary patch literal 1867 zcmbVNO=#p)98VPoEwqTTDl2Np9_-S6`JOZhn=S23-5J=_GCN{>>zkK1GoeXdHc2}( zz36r?7D4=2!IL10AfhbzaoNLyC?YO+@vt|&>cy)EaeXf{lTKxJEe>Sz^4{&dr{lyfy&m2%wtx9pjDcX9q{jw>Db&CP7n zy<{U2iqIo1EcU~gqB-vTazBP>2WNZ>cl^i^{|sM)ie}7X5OBZkENiB=vedv8Rb7 z=}3xYS(2hdZ@s~yGf9Xdq~0o4sn#F6sr{2xJxpUcF8@ci{)biG_Vk~~ag~*SX zA7>|a;VR6qBQOMzRiLO%rEJTFt?G-iX3O#r>Jray52ivbTTzZdY2A1*gZ~NkkliLp z2&vb82s>DcqmIBAv9v2BAPE(w)@hUT^-5(UA#FdP3u)uxDqml#7>Z>WKoynTT-UYh zQJTRB;d<2(XoN)H_w2H2TDn(MqU{~gdsLr?H?&OaX-5R2RKPbO|=R;qfy{b1Te>}!;r>F6vfF9 z<|~Y5xFXTr66>WQk#rBKyrAuxpVCqrj07*^D@W3K4cid0-gE@SiV}MQKb-cbWaLD? zkM{Svn3CS7PKPonX=go{;FS)|-pQJQxzD_(!8`6j3is}B|H&$9NIKR2$>#ar_K&Pa zT^MyRJ@O@?Na!#<(!Vp8Cwt-`9p|5(&TLp*3-qJ7Sa3wC6MAhtpFQv+y>dvsy3(v2 zqQCCmU49VEJnp*BeYO4b!3S{W!`p9vGhZr|o?Lk4r+41_dp4N;;ic~vzWC@-XYuBR z!{2_n_VL;4SFgfT*6%kSdh4};Ctknv?73F;6Lfv6(Y^iZ>96nT>YJawapg<> e8Ab}XXSmlsljaWJKXr{=clEXP>gTK52mb(ZMN-fJ literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/localization/i18n.json b/Mohem/src/assets/localization/i18n.json index e7adec94..f5f855ec 100644 --- a/Mohem/src/assets/localization/i18n.json +++ b/Mohem/src/assets/localization/i18n.json @@ -5,6 +5,14 @@ "fr" ], "login": { + "another-acc": { + "en": "Use another account", + "ar": "استخدم حسابا آخر" + }, + "more-verify": { + "en": "More Verification Options", + "ar": "المزيد من خيارات التحقق" + }, "login": { "en": "Login", "ar": "الدخول" @@ -144,6 +152,22 @@ "verify-fingerprint": { "en": "To activate fingerprint login service, please verify by using one of the following options. ", "ar": "لتفعيل خدمة الدخول بالبصمة، يرجى التحقق من خلال احدى الخيارات التالية" + }, + "Verify-text":{ + "en":"Verify its you", + "ar":"Verify its you" + }, + "check-user-text1":{ + "en":"Please Enter your Employee ID, A ", + "ar":"" + }, + "check-user-text2":{ + "en":"login Code ", + "ar":"" + }, + "check-user-text3":{ + "en":"will be sent to your mobile number", + "ar":"" } }, "verificationcode": { @@ -870,6 +894,26 @@ "timeAndAttendance":{ "en":"Time & Attendance", "ar":"الوقت و الحضور" + }, + "welcome-head": { + "en": "Welcome", + "ar": "مرحبا" + }, + "welcome-back": { + "en": "Welcome back!", + "ar": "مرحبا بعودتك!" + }, + "welcome": { + "en": "Welcome to", + "ar": "مرحبا بك في" + }, + "welcome-txt": { + "en": "mohemm Mobile Application", + "ar": "مهم لتطبيقات الجوال" + }, + "account-info": { + "en": "Would you like to login with current username?", + "ar": "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟" } }, "userProfile": { @@ -2082,5 +2126,23 @@ "ar":"المجموع " } + }, + "sms": { + "title": { + "en": "SMS", + "ar": "رسالة قصيرة" + }, + "fingerprint": { + "en": "Fingerprint", + "ar": "بصمة" + }, + "face-recognition": { + "en": "Face recognition", + "ar": "التعرف على الوجه" + }, + "whatsapp": { + "en": "Whatsapp", + "ar": "واتس اب" + } } } \ No newline at end of file diff --git a/Mohem/src/theme/styles.scss b/Mohem/src/theme/styles.scss index 73b3023f..12d939bc 100644 --- a/Mohem/src/theme/styles.scss +++ b/Mohem/src/theme/styles.scss @@ -229,7 +229,7 @@ p.text-caps{ } } .boldTxtNav,p.boldTxtNav,.boldTxtNav>label { - color: var(--customnavy) !important; + color: var(--dark) !important; :root[dir="ltr"]{ font-family: var(--fontFamilyBoldEN) !important; } @@ -240,7 +240,7 @@ p.text-caps{ } ion-label.boldTxtNav.label.label-md,ion-label.boldTxtNav.label.label-ios{ // font-weight: bold; - color:var(--customnavy); + color:var(--dark); :root[dir="ltr"]{ font-family: var(--fontFamilySemiBoldEN) !important; } @@ -845,7 +845,77 @@ color: var(--dark); margin: 8px !important; } + .buttonClassWhite { + border-radius: 10px !important; + width: 95% !important; + height: 3.7cm !important; + background: var(--newred) !important; + box-shadow: none !important; + border: 1px solid #cccccc !important; +} + +.nationalIdIcon { + text-align: center; + margin: 0 auto; + display: block; + padding-top: 14px; + max-height: 130px !important; +} + +.pClassMyFileIconBlack { + color: #515a5d !important; + font-weight: bold !important; + font-size: 15px !important; + // margin-top: cm !important; +} + +.logo { +max-width:150%; +width:150%; +border:0px +} + +.logoHeader { + max-width: 130%; + width: 130%; + border: 0px; +} +.headerTxt{ + font-size: 20px; + font-weight: bold; +} + + +.login-input { + border: none; +} +.item-input{ + --min-height: 1.0cm !important; + --border-radius: 12px; + --ion-color-base: white !important; + // --background: color: var(--darkgray) !important; + // background: #7f8c8d !important; + border-radius: 33px; + --border: solid #9999992b !important; + border: solid #9999992b !important; + margin-bottom :12px; + margin-left: 12px; + margin-right: 12px; +} + +.button-login{ + --background: var(--newgreen) !important; + background: var(--newgreen) !important; + white-space: normal; + color: var(--light); + text-transform: capitalize; + min-height: 1.0cm; + --border-radius: 33px !important; + border-radius: 33px !important; + --min-height: 1.6cm !important; + width: 315px; +} // .slides-gray-bullets .swiper-wrapper { // margin-top: 14px !important; // } diff --git a/Mohem/src/theme/variables.scss b/Mohem/src/theme/variables.scss index 33bb3b43..72f055c1 100644 --- a/Mohem/src/theme/variables.scss +++ b/Mohem/src/theme/variables.scss @@ -69,7 +69,10 @@ --red:#BE1E2D; --blue:#223262; --cyanblue:#1b75bc; - + --newgreen:#22c6b3; + --darkblue:#094875; + --lightblue:#3cb9d5; + --newred:#cb3232; // $font-family-base: $fontFamilyMediumEN !default; // $font-family-ios-base: $fontFamilyMediumEN !default; // $font-family-md-base:$fontFamilyMediumEN !default; From a670c06790f4ef6552947f2d686793cca3db6320 Mon Sep 17 00:00:00 2001 From: ashwaq Date: Tue, 21 Jan 2020 16:44:05 +0300 Subject: [PATCH 02/15] fix design --- .../change-password/change-password.component.html | 6 +++--- .../app/authentication/check-user/check-user.component.html | 2 +- Mohem/src/app/authentication/forgot/forgot.component.html | 4 ++-- Mohem/src/app/authentication/login/login.component.html | 4 ++-- Mohem/src/theme/styles.scss | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Mohem/src/app/authentication/change-password/change-password.component.html b/Mohem/src/app/authentication/change-password/change-password.component.html index 87f66853..ef0cdcd7 100644 --- a/Mohem/src/app/authentication/change-password/change-password.component.html +++ b/Mohem/src/app/authentication/change-password/change-password.component.html @@ -23,7 +23,7 @@

{{'changePassword,changePassword' | translate}}

- +

{{'changePassword,newPassword' | translate}}

- + - +
- + diff --git a/Mohem/src/app/app.module.ts b/Mohem/src/app/app.module.ts index 40ac3f80..f6013cf6 100644 --- a/Mohem/src/app/app.module.ts +++ b/Mohem/src/app/app.module.ts @@ -5,18 +5,16 @@ import { HmgCommonModule } from './hmg-common/hmg-common.module'; import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx'; - import { AppComponent } from './app.component'; import { AppRoutingModule } from './app-routing.module'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { ZBar } from '@ionic-native/zbar/ngx'; import { Geolocation } from '@ionic-native/geolocation/ngx'; -import {Camera,CameraOptions,PictureSourceType} from'@ionic-native/Camera/ngx'; -import { FilePath } from "@ionic-native/file-path/ngx"; -import { File } from "@ionic-native/file/ngx"; -import { Base64 } from "@ionic-native/base64/ngx"; +import {Camera, CameraOptions, PictureSourceType} from '@ionic-native/Camera/ngx'; +import { FilePath } from '@ionic-native/file-path/ngx'; +import { File } from '@ionic-native/file/ngx'; +import { Base64 } from '@ionic-native/base64/ngx'; import { FirebaseX } from '@ionic-native/firebase-x/ngx'; - @NgModule({ declarations: [AppComponent], entryComponents: [], diff --git a/Mohem/src/app/hmg-common/directive/feedback/feedback.directive.spec.ts b/Mohem/src/app/hmg-common/directive/feedback/feedback.directive.spec.ts new file mode 100644 index 00000000..7acbd168 --- /dev/null +++ b/Mohem/src/app/hmg-common/directive/feedback/feedback.directive.spec.ts @@ -0,0 +1,8 @@ +import { FeedbackDirective } from './feedback.directive'; + +describe('FeedbackDirective', () => { + it('should create an instance', () => { + const directive = new FeedbackDirective(); + expect(directive).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/hmg-common/directive/feedback/feedback.directive.ts b/Mohem/src/app/hmg-common/directive/feedback/feedback.directive.ts new file mode 100644 index 00000000..14637341 --- /dev/null +++ b/Mohem/src/app/hmg-common/directive/feedback/feedback.directive.ts @@ -0,0 +1,24 @@ +import { Directive, ElementRef, HostListener } from '@angular/core'; +import { TranslatorService } from '../../services/translator/translator.service'; +import { CommonService } from '../../services/common/common.service'; +import { FeedbackService } from './feedback.service'; + +@Directive({ + selector: '[feedback]' +}) +export class FeedbackDirective { + + constructor( + private cs: CommonService, + private ts: TranslatorService, + private el: ElementRef, + private feedBackService: FeedbackService + ) { + + } + + + @HostListener('mousedown') onMouseEnter() { + this.feedBackService.vibrate(); + } +} diff --git a/Mohem/src/app/hmg-common/directive/feedback/feedback.service.spec.ts b/Mohem/src/app/hmg-common/directive/feedback/feedback.service.spec.ts new file mode 100644 index 00000000..dabb73db --- /dev/null +++ b/Mohem/src/app/hmg-common/directive/feedback/feedback.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { FeedbackService } from './feedback.service'; + +describe('FeedbackService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: FeedbackService = TestBed.get(FeedbackService); + expect(service).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/hmg-common/directive/feedback/feedback.service.ts b/Mohem/src/app/hmg-common/directive/feedback/feedback.service.ts new file mode 100644 index 00000000..a2b446da --- /dev/null +++ b/Mohem/src/app/hmg-common/directive/feedback/feedback.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@angular/core'; +import { Vibration } from '@ionic-native/vibration/ngx'; +// import { SettingsService } from 'src/app/settings/service/settings.service'; + +@Injectable({ +providedIn: 'root' +}) +export class FeedbackService { +// constructor(private vibration: Vibration, private settings: SettingsService) {} +constructor(private vibration: Vibration) {} + +public async vibrate() { +try { +const on = true; +if (on) { +this.vibration.vibrate(500); +}} catch (e) { +} +} +} diff --git a/Mohem/src/app/hmg-common/hmg-common.module.ts b/Mohem/src/app/hmg-common/hmg-common.module.ts index 520715e4..3be427e4 100644 --- a/Mohem/src/app/hmg-common/hmg-common.module.ts +++ b/Mohem/src/app/hmg-common/hmg-common.module.ts @@ -42,19 +42,14 @@ import { NativeStorage } from '@ionic-native/native-storage/ngx'; import { ProgressLoadingService } from './ui/progressLoading/progress-loading.service'; import { BarChartComponent } from './ui/bar-chart/bar-chart.component'; import { DonutChartComponent } from './ui/donut-chart/donut-chart.component'; -//import { UserLocalNotificationService } from './services/user-local-notification/user-local-notification.service'; -//import { LocalNotifications } from '@ionic-native/local-notifications/ngx'; import { EmailComponent } from './ui/email/email.component'; import { Badge } from '@ionic-native/badge/ngx'; -// import { Push } from '@ionic-native/push/ngx'; import { PushService } from './services/push/push.service'; import { LifeCycleService } from './services/life-cycle/life-cycle.service'; import { HmgBrowserService } from './services/hmg-browser/hmg-browser.service'; import { GuidService } from './services/guid/guid.service'; import { TabsBarComponent } from './ui/tabs-bar/tabs-bar.component'; import { PageTrailerComponent } from './ui/spacer/page-trailer/page-trailer.component'; -//import { GeofencingService } from './services/geofencing/geofencing.service'; -// import { BackgroundGeolocation } from '@ionic-native/background-geolocation/ngx'; import { ButtonComponent } from './ui/button/button.component'; import { ToolbarButtonComponent } from './ui/toolbar-button/toolbar-button.component'; import { ListboxModule } from 'primeng/listbox'; @@ -82,24 +77,23 @@ import { Diagnostic } from '@ionic-native/diagnostic/ngx'; import { DetailButtonComponent } from './ui/detail-button/detail-button.component'; import { RouterModule } from '@angular/router'; import { HeaderButtonComponent } from './ui/header-button/header-button.component'; -//import { CallNumber } from '@ionic-native/call-number/ngx'; import { AppRate } from '@ionic-native/app-rate/ngx'; import { RatingService } from './services/rating/rating.service'; import { InAppBrowser } from '@ionic-native/in-app-browser/ngx'; import { RateService } from './services/rate/rate.service'; -//import { PaymentComponent } from './ui/payment/payment.component'; -//import { PaymentService } from './ui/payment/service/payment.service'; import { MenuService } from './services/menu/menuservice.service'; import { ReplacementListComponent } from '../vacation-rule/replacement-list/replacement-list.component'; import { FileSelectDirective } from 'ng2-file-upload'; - import { PdfViewerModule } from 'ng2-pdf-viewer'; +import { PdfViewerModule } from 'ng2-pdf-viewer'; import { WorkListAttachViewComponent } from '../notification/work-list-attach-view/work-list-attach-view.component'; -import {Camera,CameraOptions, PictureSourceType} from '@ionic-native/Camera/ngx'; +import {Camera, CameraOptions, PictureSourceType} from '@ionic-native/Camera/ngx'; import {File} from '@ionic-native/file/ngx'; import {FileUploderProfileComponent} from './ui/file-uploder-profile/file-uploder-profile.component' import { OpenNativeSettings } from '@ionic-native/open-native-settings/ngx'; import { AccordinCustomComponent } from './ui/accordin-custom/accordin-custom.component'; import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-custom/accordin-tab-custom.component' +import { StatsButtonComponent } from './ui/stats-button/stats-button.component'; +import { ServicesButtonComponent } from './ui/services-button/services-button.component'; @NgModule({ imports: [ CommonModule, @@ -165,7 +159,9 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus WorkListAttachViewComponent, FileUploderProfileComponent, AccordinTabCustomComponent, - AccordinCustomComponent + AccordinCustomComponent, + StatsButtonComponent, + ServicesButtonComponent ], exports: [ NumberRangeComponent, @@ -212,13 +208,14 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus EmptyDataComponent, DetailButtonComponent, HeaderButtonComponent, - //PaymentComponent, ReplacementListComponent, FileSelectDirective, WorkListAttachViewComponent, FileUploderProfileComponent, AccordinTabCustomComponent, - AccordinCustomComponent + AccordinCustomComponent, + StatsButtonComponent, + ServicesButtonComponent ], providers: [ ConnectorService, @@ -234,14 +231,10 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus NativeStorage, ProgressLoadingService, PushService, - //UserLocalNotificationService, - //LocalNotifications, Badge, LifeCycleService, HmgBrowserService, GuidService, - // BackgroundGeolocation, - //GeofencingService, Keyboard, KeyboardService, Diagnostic, @@ -250,14 +243,12 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus HMGPreloadingStrategy, HMGPreloadingStrategyLoading, Diagnostic, - // CallNumber, AppRate, RatingService, InAppBrowser, RateService, Camera, File, - //PaymentService, MenuService, OpenNativeSettings ] diff --git a/Mohem/src/app/hmg-common/ui/nav-buttons/nav-buttons.component.scss b/Mohem/src/app/hmg-common/ui/nav-buttons/nav-buttons.component.scss index b2fe3562..ab0299d1 100644 --- a/Mohem/src/app/hmg-common/ui/nav-buttons/nav-buttons.component.scss +++ b/Mohem/src/app/hmg-common/ui/nav-buttons/nav-buttons.component.scss @@ -1,3 +1,8 @@ .float-left{ float: left; +} +ion-menu-button { + font-size: 0.8cm; + color: white; + background: #22c6b3; } \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/services-button/services-button.component.html b/Mohem/src/app/hmg-common/ui/services-button/services-button.component.html new file mode 100644 index 00000000..ef14b4af --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/services-button/services-button.component.html @@ -0,0 +1,8 @@ +
+
+ +
+
+

{{title}}

+
+
\ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/services-button/services-button.component.scss b/Mohem/src/app/hmg-common/ui/services-button/services-button.component.scss new file mode 100644 index 00000000..ff7c3d40 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/services-button/services-button.component.scss @@ -0,0 +1,34 @@ +.custom-button { + background: white; + margin-bottom: 0px; + border: 1px solid #ccc; + border-radius: 20px; + width: 100%; + max-width: 105px; + height: 100px; + padding: 10px; + min-width: 96px; +} + +.iconBox { + display: block; + width: 100%; + position: static; +} +.iconBox img{ + margin: 0px auto 10px; + display: block; + // max-width: 35%; +} + +.titleBox { + display: block; +} + +.pClass { + font-size: 12PX; + text-align: center; + margin-top: 10px; + color: black; + font-weight: bold; +} \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/services-button/services-button.component.spec.ts b/Mohem/src/app/hmg-common/ui/services-button/services-button.component.spec.ts new file mode 100644 index 00000000..67215f5b --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/services-button/services-button.component.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ServicesButtonComponent } from './services-button.component'; + +describe('ServicesButtonComponent', () => { + let component: ServicesButtonComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ServicesButtonComponent ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ServicesButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/hmg-common/ui/services-button/services-button.component.ts b/Mohem/src/app/hmg-common/ui/services-button/services-button.component.ts new file mode 100644 index 00000000..bdc3b3b1 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/services-button/services-button.component.ts @@ -0,0 +1,28 @@ +import { Component, OnInit, Input, Output, EventEmitter} from '@angular/core'; +import { TranslatorService } from '../../services/translator/translator.service'; + +@Component({ + selector: 'app-services-button', + templateUrl: './services-button.component.html', + styleUrls: ['./services-button.component.scss'], +}) +export class ServicesButtonComponent implements OnInit { + + @Input() class: any = ''; + @Input() buttonClass: any = ''; + @Input() icon: string; + @Input() title: string; + @Output() trigger = new EventEmitter(); + @Input() focusicon: string; + @Input() disabled = false; + public direction: string; + public style: any; + constructor( + public ts: TranslatorService + ) {} + + ngOnInit() {} + + public onClicked() {} +} + diff --git a/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.html b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.html new file mode 100644 index 00000000..554414ee --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.html @@ -0,0 +1,9 @@ +
+
+ +
+
+ {{statsValue}} +

{{title}}

+
+
\ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.scss b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.scss new file mode 100644 index 00000000..5c7cc59c --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.scss @@ -0,0 +1,42 @@ +.custom-button { + background: white; + margin-bottom: 0px; + border: 1px solid #ccc; + border-radius: 20px; + width: 100%; + max-width: 105px; + height: 160px; + padding: 10px; +} + +.iconBox { + display: block; + width: 100%; + position: static; + img { + display: block; + max-width: 45%; + padding-bottom: 5px; + padding-top: 5px; + } +} + +.titleBox { + display: block; + span { + font-size: 40px; + font-weight: bold; + color: black; + text-align: left; + display: block; + } +} + +.pClass { + color: black; + width: 85%; + margin-top: 5px; + font-weight: bold; + text-align: left; + display: block; +} diff --git a/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.spec.ts b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.spec.ts new file mode 100644 index 00000000..8446e7cd --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { StatsButtonComponent } from './stats-button.component'; + +describe('StatsButtonComponent', () => { + let component: StatsButtonComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ StatsButtonComponent ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(StatsButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.ts b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.ts new file mode 100644 index 00000000..b204d12d --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.ts @@ -0,0 +1,29 @@ +import { Component, OnInit, Input, Output, EventEmitter} from '@angular/core'; +import { TranslatorService } from '../../services/translator/translator.service'; + +@Component({ + selector: 'app-stats-button', + templateUrl: './stats-button.component.html', + styleUrls: ['./stats-button.component.scss'], +}) +export class StatsButtonComponent implements OnInit { + + @Input() class: any = ''; + @Input() buttonClass: any = ''; + @Input() icon: string; + @Input() title: string; + @Input() statsValue: string; + @Output() trigger = new EventEmitter(); + @Input() focusicon: string; + @Input() disabled = false; + public direction: string; + public style: any; + constructor( + public ts: TranslatorService + ) {} + + ngOnInit() {} + + public onClicked() {} + +} diff --git a/Mohem/src/app/home/home.module.ts b/Mohem/src/app/home/home.module.ts index 58e6cd52..781a20ec 100644 --- a/Mohem/src/app/home/home.module.ts +++ b/Mohem/src/app/home/home.module.ts @@ -6,7 +6,7 @@ import { HmgCommonModule } from '../hmg-common/hmg-common.module'; import { IonicModule } from '@ionic/angular'; import { HomePage } from './home.page'; import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; - +import { NgCircleProgressModule } from 'ng-circle-progress'; const routes: Routes = [ { path: '', @@ -20,7 +20,9 @@ const routes: Routes = [ FormsModule, IonicModule, HmgCommonModule, - RouterModule.forChild(routes) + RouterModule.forChild(routes), + // Specify ng-circle-progress as an import + NgCircleProgressModule.forRoot() ], declarations: [ HomePage diff --git a/Mohem/src/app/home/home.page.html b/Mohem/src/app/home/home.page.html index fe151468..4d425c4d 100644 --- a/Mohem/src/app/home/home.page.html +++ b/Mohem/src/app/home/home.page.html @@ -1,117 +1,164 @@ -
-
--> - -
- - -
-

{{ts.trPK('home','hello')}}, {{userData.EMPLOYEE_DISPLAY_NAME}}

-
- - + -
- - -
-
- - - - + + + + + + + + + + + -
-
+ + +

Monthly Attendance

+ View your Monthly Time Sheet + + View Detail + +
+ + + +
+ + {{menuItem.PROMPT}} + + + + + + + + + -
-
-

{{ts.trPK('home','dashboard')}}

-
-
- - - - - - - - - - - - - - - - - + + + - - - + --> - + + + + + + + +{{displayTime}} + + diff --git a/Mohem/src/app/home/home.page.scss b/Mohem/src/app/home/home.page.scss index 280c4b4a..81add380 100644 --- a/Mohem/src/app/home/home.page.scss +++ b/Mohem/src/app/home/home.page.scss @@ -1,153 +1,85 @@ -.button-menutoggle.button-menutoggle-md,button-menutoggle.button-menutoggle-ios, -.bar-buttons.bar-buttons-ios.button.button-ios.button-default.button-default-ios.button-menutoggle.button-menutoggle-ios{ - box-shadow: none; - -webkit-box-shadow:none; - -moz-box-shadow: none; - background: transparent !important; - } - .colorBG{ - --background: #f0efef; - } +ion-row { + margin-bottom: 15px; + margin-top: 10px; +} - .menubutton{ - white-space: normal; - color: var(--light); - text-transform: capitalize; - min-height: 47px; - background: transparent; - font-size: 2rem; +.header-toolbar-new{ + --background: #22c6b3; +} +ion-title{ + color: white; position: absolute; - top: 40px; - } - .menubuttonTrans{ - white-space: normal; - color: var(--light); - text-transform: capitalize; - min-height: 47px; - background: transparent; - font-size: 2rem; - position: absolute; - top: 40px; - left: 315px - } - #homeBadgeBtn{ - position: absolute; - top: 2px; - width: 20px; - font-size: 10px; - height: 20px; - padding: 0px; - line-height: 2; - min-width: auto; - min-height: auto; - border-radius: 50%; - } - .homeBox{ - - - } - .header-div{ - background:var(--primary); - background: -moz-linear-gradient(45deg, var(--primary) 0%, var(--secondary) 36%,var(--secondary) 59%, var(--customnavy) 100%); - background: -webkit-linear-gradient(45deg, (--primary) 0%, var(--secondary) 36%,var(--secondary) 59%, var(--customnavy) 100%); - background: linear-gradient(90deg, #85C48D 0%, #85C48D 13%, #2BB5C6 98%, #2BB5C6 100%); - color:var(--light); - text-transform: capitalize; - - display: block; - position: relative; - height: 210px; - margin-bottom:60px; - border-radius: 0px 0px 70px 70px; - } - - .dash-header{ + top: 0; text-align: center; - margin: 16px 0 0 0; - - } - - .TxtPlace { - margin: 0; - padding: 50px 0 10px 0; - text-align: center; - width:100%; - } - - .serviceItem { - // min-height: 160px !important; - // padding: 0; - // width: 95%; - // border: 0px solid #e4e5e7; - // background: white; - // color: var(--dark); - // border-radius: 7px; - min-height: 200px !important; - padding-top: 0; - width: 95%; - margin-left: 4px; - margin-bottom: 13px; - border: 0px solid #e4e5e7; - background: white; - color: var(--dark); - border-radius: 7px; - p{ - margin-top: 0px; margin-bottom:0px; - font-weight: normal; + left: 15%; + right: 15%; + font-size: 0.42cm; + font-weight: bold; + height: 100%; +} +ion-label{ + display: block; + color: black !important; font-size: 14px; - min-height: 20px; - // white-space: normal; - text-align: center; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - overflow: hidden; + font-weight: bold; +} +.main-dashboard-container{ + position: relative; + width: 100%; +} +.header-md:after { + height: 0px !important; + display: none !important; +} +.contentBg:before { + position: absolute; + content: ""; + background: #22c6b3; + height: 100px; + width: 100%; + left: 0; + top: 0px; + z-index: 1; +} +.main-container{ + position: relative; + z-index: 2; + padding-right: 15px; + padding-left: 15px; +} +.attendance-module{ + border-radius: 20px; + background-color: #094875; + padding: 10px; + color: white; + width: 100%; + h3{ + font-size: 18px; + font-weight: bold; + margin: 0; } - span { - display: block; - + span{ + font-size: 13px; + display: block; } - .serviceItemImg { - min-width: 60px !important; - min-height: 70px !important; - width: 80px; - height: 80px; - margin: 10px auto; - background: transparent !important; + img{ + display: block; + margin: 10px auto; + width: 80%; } - - } - .serviceItem.button,.serviceItem.button-md, .serviceItem.button-ios{ - background: transparent !important; - color:var(--dark); - box-shadow: none; - -webkit-box-shadow:none; - -moz-box-shadow: none; - border: 2px solid var(--gray); - min-width: auto; - } - //test - .changeImgBtn{ - margin: 0; - position: absolute; - top: 80%; - left: 53%; - -ms-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - } -//test - .changeIcon{ - background: #c1c1c1; - width: 40px; - height: 39px; - border-radius: 50% !important; - position: relative; - left: 51px; - top:16px; - } - .menuImg{ - max-width: 30px; - } - .transImg{ - max-width: 45px; - } - + ion-button{ + border-radius: 10px; + padding: 10px; + background: #3CB9DF; + --background: transparent; + --box-shadow: none !important; + height: auto; + min-height: inherit; + margin-top: 10px; + font-size: 12px; + } +} +.swiper-container { + margin: 0 !important; + width: 100% !important; +} \ No newline at end of file diff --git a/Mohem/src/app/home/home.page.ts b/Mohem/src/app/home/home.page.ts index 85d2fe20..3ac99758 100644 --- a/Mohem/src/app/home/home.page.ts +++ b/Mohem/src/app/home/home.page.ts @@ -1,39 +1,36 @@ -import { EitService } from "./../eit/services/eit.service"; -import { Component, OnInit } from "@angular/core"; -import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service"; -import { MenuController, Events, ActionSheetController } from "@ionic/angular"; -import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service"; -import { AuthenticatedUser } from "src/app/hmg-common/services/authentication/models/authenticated-user"; -import { MenuService } from "src/app/hmg-common/services/menu/menuservice.service"; -import { MenuResponse } from "src/app/hmg-common/services/menu/models/menu-response"; -import { CommonService } from "src/app/hmg-common/services/common/common.service"; -import { Geolocation } from "@ionic-native/geolocation/ngx"; -import { ZBar, ZBarOptions } from "@ionic-native/zbar/ngx"; +import { EitService } from './../eit/services/eit.service'; +import { Component, OnInit } from '@angular/core'; +import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service'; +import { MenuController, Events, ActionSheetController } from '@ionic/angular'; +import { AuthenticationService } from 'src/app/hmg-common/services/authentication/authentication.service'; +import { AuthenticatedUser } from 'src/app/hmg-common/services/authentication/models/authenticated-user'; +import { MenuService } from 'src/app/hmg-common/services/menu/menuservice.service'; +import { MenuResponse } from 'src/app/hmg-common/services/menu/models/menu-response'; +import { CommonService } from 'src/app/hmg-common/services/common/common.service'; +import { Geolocation } from '@ionic-native/geolocation/ngx'; +import { ZBar, ZBarOptions } from '@ionic-native/zbar/ngx'; import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; -import { Device } from "@ionic-native/device/ngx"; -import { attendanceSwipeScannerRequest } from "./models/attendanceSwipe.Request"; -import { Response } from "src/app/hmg-common/services/models/response"; -import { AttendanceService } from "./services/attendance.services"; -import { LoginRequest } from "../hmg-common/services/authentication/models/login.request"; +import { Device } from '@ionic-native/device/ngx'; +import { attendanceSwipeScannerRequest } from './models/attendanceSwipe.Request'; +import { Response } from 'src/app/hmg-common/services/models/response'; +import { AttendanceService } from './services/attendance.services'; +import { LoginRequest } from '../hmg-common/services/authentication/models/login.request'; import {FileUploaderComponent} from '../hmg-common/ui/file-uploader/file-uploader.component' -import { Camera, CameraOptions,PictureSourceType} from "@ionic-native/Camera/ngx"; -//import { FileChooser } from "@ionic-native/file-chooser/ngx"; -import { File } from "@ionic-native/file/ngx"; +import { Camera, CameraOptions,PictureSourceType} from '@ionic-native/Camera/ngx'; +import { File } from '@ionic-native/file/ngx'; import { DomSanitizer } from '@angular/platform-browser'; -//import { FilePath } from "@ionic-native/file-path/ngx"; -//import { Base64 } from "@ionic-native/base64/ngx"; import {FileUploderProfileComponent} from '../hmg-common/ui/file-uploder-profile/file-uploder-profile.component' import { SharedDataService } from '../hmg-common/services/shared-data-service/shared-data.service'; import { DevicePermissionsService } from '../hmg-common/services/device-permissions/device-permissions.service'; @Component({ - selector: "app-home", - templateUrl: "./home.page.html", - styleUrls: ["./home.page.scss"] + selector: 'app-home', + templateUrl: './home.page.html', + styleUrls: ['./home.page.scss'] }) export class HomePage implements OnInit { userData: any = {}; - user_image: any = "../assets/imgs/profile.png"; + user_image: any = '../assets/imgs/profile.png'; menuList: any = []; zbarOptions: any; scannedResult: any; @@ -41,11 +38,77 @@ export class HomePage implements OnInit { lat: any; longt: any; deviceID: string; - public maxFileSize =10 * 1024 * 1024; - public fileUploder :FileUploaderComponent; + public maxFileSize = 10 * 1024 * 1024; + public fileUploder: FileUploaderComponent; // public fileUploderProfile:FileUploderProfileComponent location: boolean; - camera: boolean + camera: boolean; + public statsButtons = [ + { + title: 'Work List', + statsValue: '79', + icon: 'assets/icon/new-design/work_list.png' + }, + { + title: 'Pending Request', + statsValue: '13', + icon: 'assets/icon/new-design/pending_request.png' + }, + { + title: 'Missing Swipes', + statsValue: '99', + icon: 'assets/icon/new-design/missing_swipe.png' + }, + { + title: 'Leave Balance', + statsValue: '02', + icon: 'assets/icon/new-design/leave_balance.png' + }, + { + title: 'Ticket Balance', + statsValue: '01', + icon: 'assets/icon/new-design/ticket_balance.png' + } + ]; + + public employeeServicesButtons = [ + { + title: 'Leave Management', + icon: 'assets/icon/new-design/leave_management.png' + }, + { + title: 'Advance Payments', + icon: 'assets/icon/new-design/advance_payments.png' + }, + { + title: 'Medical Insurance', + icon: 'assets/icon/new-design/medical_insurance.png' + }, + { + title: 'Pay Slip', + icon: 'assets/icon/new-design/pay_slip.png' + } + ]; + public slideOptsOne = { + slidesPerView: 3.5, + spaceBetween: 10 +}; +public slideOptsTwo = { + slidesPerView: 3.2, + spaceBetween: 10 +}; + +public timeInSeconds: any = 200; +public time: any; +public runTimer = false; +public hasStarted = false; +public hasFinished = false; +public remainingTime: any; +public displayTime: any; +public menuEntries: any; +public titleFormat: any; +public percent = 10; + constructor( public ts: TranslatorService, public menu: MenuController, @@ -63,44 +126,86 @@ export class HomePage implements OnInit { private cameraController: Camera, public sharedData: SharedDataService, private sanitizer: DomSanitizer, - //private transfer: Transfer, - private file: File, - //private filePath: FilePath + private file: File, private permissions: DevicePermissionsService ) { - this.events.subscribe("img-change", displayImg => { - - // this.user_image = "data:image/jpeg;base64"+displayImg; - // alert("home app: "); - this.user_image = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg); - console.log("html saved img: "+this.user_image); + this.events.subscribe('img-change', displayImg => { + this.user_image = this.sanitizer.bypassSecurityTrustUrl('data:Image/*;base64,'+displayImg); + console.log('html saved img: ' + this.user_image); }); } - ngOnInit() { - this.getUserDetails(); - this.getMenu(); - this.setServicesPrivilage(); + // this.getUserDetails(); + // this.getMenu(); + // this.setServicesPrivilage(); - this.getCount(); + // this.getCount(); - - this.events.subscribe("getNotCount", badge => { - this.notBadge = badge; - }); + this.initTimer(); + // this.events.subscribe('getNotCount', badge => { + // this.notBadge = badge; + // }); } + // formatSubtitle = (time: number) : string => { + // return + // } + + initTimer() { + this.time = this.timeInSeconds; + this.runTimer = false; + this.hasStarted = false; + this.hasFinished = false; + this.remainingTime = this.timeInSeconds; + this.displayTime = this.getSecondsAsDigitalClock(this.remainingTime); + this.startTimer(); + } + + startTimer() { + this.runTimer = true; + this.hasStarted = true; + this.timerTick(); +} + +timerTick() { + setTimeout(() => { + + if (!this.runTimer) { return; } + this.remainingTime--; + this.displayTime = this.getSecondsAsDigitalClock(this.remainingTime); + this.percent = this.percent + 1; + if (this.remainingTime > 0) { + this.timerTick(); + } else { + this.hasFinished = true; + } + }, 1000); +} + +getSecondsAsDigitalClock(inputSeconds: number) { + const secNum = parseInt(inputSeconds.toString(), 10); // don't forget the second param + const hours = Math.floor(secNum / 3600); + const minutes = Math.floor((secNum - (hours * 3600)) / 60); + const seconds = secNum - (hours * 3600) - (minutes * 60); + let hoursString = ''; + let minutesString = ''; + let secondsString = ''; + hoursString = (hours < 10) ? '0' + hours : hours.toString(); + minutesString = (minutes < 10) ? '0' + minutes : minutes.toString(); + secondsString = (seconds < 10) ? '0' + seconds : seconds.toString(); + return hoursString + ':' + minutesString + ':' + secondsString; +} + getDeviceLocation() { - let isVirtual = this.device.isVirtual; - if(isVirtual==true){ - alert("emulater>>>>>>>"+isVirtual); - alert("You are using virtual device"); + const isVirtual = this.device.isVirtual; + if (isVirtual === true){ + alert('emulater>>>>>>>' + isVirtual); + alert('You are using virtual device'); return false; } - this.permissions.requestLocationAutherization().then(granted => { this.location = granted as boolean; if (this.location) { @@ -114,9 +219,8 @@ export class HomePage implements OnInit { this.attendance(); }) .catch(error => { - console.log("Error getting location", error); + console.log('Error getting location', error); }); - } else { return false; } @@ -128,8 +232,8 @@ export class HomePage implements OnInit { setServicesPrivilage() { for (let i = 0; i < AuthenticationService.servicePrivilage.length; i++) if (AuthenticationService.servicePrivilage[i].Previlege == false) { - document.getElementById(AuthenticationService.servicePrivilage[i].ServiceName).setAttribute("disabled", "disabled"); - document.getElementById(AuthenticationService.servicePrivilage[i].ServiceName).style.filter = "grayscale(1)" + document.getElementById(AuthenticationService.servicePrivilage[i].ServiceName).setAttribute('disabled', 'disabled'); + document.getElementById(AuthenticationService.servicePrivilage[i].ServiceName).style.filter = 'grayscale(1)' } } getCount() { @@ -169,20 +273,19 @@ export class HomePage implements OnInit { ionViewDidLoad() { this.getUserDetails(); - console.log("getUserDetails"); + console.log('getUserDetails'); this.geolocation .getCurrentPosition() .then(resp => { // resp.coords.latitude // resp.coords.longitude - //console.log("Loc 1"); console.log(resp.coords.latitude); console.log(resp.coords.longitude); this.lat = resp.coords.latitude; this.longt = resp.coords.longitude; }) .catch(error => { - console.log("Error getting location", error); + console.log('Error getting location', error); }); } private openMenu() { @@ -193,12 +296,12 @@ export class HomePage implements OnInit { .loadAuthenticatedUser() .subscribe((user: AuthenticatedUser) => { if (user) { - this.events.publish("setMenu"); + this.events.publish('setMenu'); this.userData = user; - //set User Info + // set User Info this.sharedData.setSharedData(this.userData, AuthenticatedUser.SHARED_DATA); this.user_image = user.EMPLOYEE_IMAGE - ? "data:image/png;base64," + user.EMPLOYEE_IMAGE + ? 'data:image/png;base64,' + user.EMPLOYEE_IMAGE : this.user_image; console.log(user); } else { @@ -207,7 +310,7 @@ export class HomePage implements OnInit { }); } public Vacation_Rule() { - this.common.navigateForward("/vacation-rule/home"); + this.common.navigateForward('/vacation-rule/home'); } private getMenu() { this.menuService.getMenu().subscribe((result: MenuResponse) => { @@ -217,8 +320,10 @@ export class HomePage implements OnInit { private handleMenuResult(result) { if (this.common.validResponse(result)) { if (this.common.hasData(result.List_Menu)) { - console.log("list menu"); + console.log('list menu'); this.menuList = result.List_Menu; + console.log('umar: ' + this.menuList); + this.getMenuDetails(); } } } @@ -230,31 +335,33 @@ export class HomePage implements OnInit { this.common.openChangeImagePage(); } - public getMeunDetails(index) { - let item = this.menuList[index]; - let selMenu: MenuResponse = new MenuResponse(); + public getMenuDetails() { + const item = this.menuList[0]; + const selMenu: MenuResponse = new MenuResponse(); selMenu.List_Menu = item; selMenu.userid = this.userData.EMPLOYEE_NUMBER; - console.log("menu: "+selMenu.List_Menu); + console.log('menu: ' + selMenu.List_Menu); this.common.sharedService.setSharedData(selMenu, MenuResponse.SHARED_DATA); - if (item.MENU_TYPE == "M") { - this.common.openMyTeamPage(); - // this.navCtrl.push("MySubordinatePage"); - } else if (item.MENU_TYPE == "S") { - this.common.sharedService.setSharedData(item, 'mySpecList'); - this.common.openMySpecialistPage(); - //this.navCtrl.push('MySpecialistPage',{"mySpecList":item}); - } else { - this.getMenuEntries(item); - } + this.getMenuEntries(item); + // if (item.MENU_TYPE === 'M') { + // this.common.openMyTeamPage(); + // // this.navCtrl.push("MySubordinatePage"); + // } else if (item.MENU_TYPE === 'S') { + // this.common.sharedService.setSharedData(item, 'mySpecList'); + // this.common.openMySpecialistPage(); + // // this.navCtrl.push('MySpecialistPage',{"mySpecList":item}); + // } else { + // this.getMenuEntries(item); + // } } getMenuEntries(item) { - let request: any = {}; + console.log('umar I am clicked2'); + const request: any = {}; let selEmpNo: string = null; let nationality: string = null; request.P_SELECTED_RESP_ID = -999; - if (item.MENU_TYPE == "S") { + if (item.MENU_TYPE === 'S') { request.P_SELECTED_RESP_ID = item.RESP_ID; } else { selEmpNo = this.common.sharedService.getSharedData( @@ -269,8 +376,8 @@ export class HomePage implements OnInit { request.P_SELECTED_EMPLOYEE_NUMBER = selEmpNo; request.P_MENU_TYPE = item.MENU_TYPE; request.NationalityCode = nationality; - //set emp and resp id - console.log("set data"); + // set emp and resp id + console.log('set data'); this.common.sharedService.setSharedData( selEmpNo, MenuResponse.SHARED_SEL_EMP @@ -288,10 +395,12 @@ export class HomePage implements OnInit { } sortMenuEntires(list) { - let tree = this.common.list_to_tree(list); - this.common.sharedService.setSharedData(tree, "menuEntries"); + const tree = this.common.list_to_tree(list); + this.menuEntries = tree; + console.log(this.menuEntries); + this.common.sharedService.setSharedData(tree, 'menuEntries'); // this.common.navigateForward("/eit/homepage"); - this.common.openEITPage(); + // this.common.openEITPage(); } private handleMenuEntiresResult(result) { @@ -313,8 +422,8 @@ export class HomePage implements OnInit { // flash: "off", // drawSight: false // }; - //console.log("your currnt location is"); - //console.log("Loc"); + // console.log("your currnt location is"); + // console.log("Loc"); this.permissions.requestCameraAutherization().then(granted => { this.camera = granted as boolean; if (this.camera) { @@ -352,25 +461,25 @@ export class HomePage implements OnInit { } swipeAttendance() { - let request: attendanceSwipeScannerRequest = new attendanceSwipeScannerRequest(); + const request: attendanceSwipeScannerRequest = new attendanceSwipeScannerRequest(); request.Latitude = this.lat; request.Longitude = this.longt; request.QRValue = this.scannedResult.text; request.UID = this.deviceID; request.UserName = this.userData.EMPLOYEE_NUMBER; - console.log("request"); + console.log('request'); console.log(JSON.stringify(request)); this.attendance_service .attendanceSwipeScanner(request, () => { - console.log("Error inside in swipe attendance"); + console.log('Error inside in swipe attendance'); }) .subscribe((result: Response) => { if (this.common.validResponse(result)) { - console.log("response"); + console.log('response'); console.log(result); - this.common.presentAlert(this.ts.trPK("home", "swipeAlertSuccess")); + this.common.presentAlert(this.ts.trPK('home', 'swipeAlertSuccess')); } else { - this.common.presentAlert(this.ts.trPK("home", "swipeAlertFailed")); + this.common.presentAlert(this.ts.trPK('home', 'swipeAlertFailed')); } }); } @@ -378,3 +487,14 @@ export class HomePage implements OnInit { this.common.openProfile(); } } + + + + + + + + + + + diff --git a/Mohem/src/assets/icon/new-design/advance_payments.png b/Mohem/src/assets/icon/new-design/advance_payments.png new file mode 100644 index 0000000000000000000000000000000000000000..f867e01349c9ddc9d06a5a2d838ceb8279774df2 GIT binary patch literal 1116 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 Hu0mjfY>|XT literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/new-design/id_badge_request.png b/Mohem/src/assets/icon/new-design/id_badge_request.png new file mode 100644 index 0000000000000000000000000000000000000000..2af2dff76a790ef6b6edb463404b5094089fe23f GIT binary patch literal 1231 zcmV;=1Tg!FP)Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91E1&}a z1ONa40RR91A^-pY06+u>vj6}DMM*?KR9FesSY1q1M--lA0e59#X($m=lZ{|3HKi;K zjmBVBqCPe)FKyBXO^UJh#gMdVN-#cIc`0chn)nm@&=(~pZT)#MQQIXnBz@thRok?p zX=%hZX<#c2Y+xO~Z=9Ljyn6bxR5&SfSrZhRDx&3A=XPPBBS4b}q zgiE5`I$WPVTpXV19=D!0F$YAn9f!_YN^`D|Uf=-Ss{lLtE$|1BSK+zh17SLnt&T6j zD%*Ny-U8~5ur{x*1z%ZdNw~Qw>+?G^azm7bE5{cS527sU5?LCm5TPxbT;a^z#o7PG z>~D9O{3VY;X{aHRXg%>sIJ4AiQvgI^}nE3ToZ$R?*}$|nadXSa-x$38R3dJSEkD{;%7 z1sOEQfP48x5i|bGaARlV#wk**IA(GiwBr}}8sInUG{6h`G!Ov_F3WXx6l^#y{p$mZ z{)+Vv@d8Qd7~d>?Kp{kNG-uXpL4Jq?s$YFsG#x!Gg7q8xI>|RPc2nH=s88T-{TQ)Y z;D8=;s-K(=?1R8oz`}}?q=2>1#Q5?MTd0eUi{*r4dUT3xg-Ab7=im$0<2|VBaTID}i2AR_a{NPCb)M2k=ex(!kL-V2i z*K2|oSy576W^*I&z9ptET@#IsjUp5Zi9{kHf*b2pSDCb7?@n>+h~gE4`?;Q21Fd#Q z`zxvcbOPsm0}Ojj@FF{xnom}l)~8hQmTD)|BkRaGfshN#gb%$)kR$F~FQ+j{Ows>zXHY+iH5b_}PPmZLQs z!>YURWh@pm9Md$fGLCDwZvtLre*zT#`zQ{O5cB(i!`glwdO+Jy;%9(6@O6&pl({PF9Xbo2a z-9DesXTAlPXMy;A_=W^?*HSD;Yb>)GJH?|B2Y3%gfI^DpXpKUyzRI-}N8YpC<`&?) tRTd~zI$!0K+x*cDECOU-tl+~g9s#|%-`q`GsDuCj002ovPDHLkV1g;5BM1Nh literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/new-design/it_forms.png b/Mohem/src/assets/icon/new-design/it_forms.png new file mode 100644 index 0000000000000000000000000000000000000000..793d983c6c19057211b074646fb14094a22158b5 GIT binary patch literal 853 zcmV-b1FHOqP)Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91AD{yO z1ONa40RR91C;$Ke06Ap^_b+hh<<{m)YGTpv67O!~4!V z^S;mSJ2QX~5sqO3P;Z$d)b~Lb6cTKKZ@{-;7u*J16eWoUxCd4_2*3`V9ia@JG1zqQ zQ2}3pg>X3NwX_K9Qpn-Se!WOOg@>S9Dx!GM_bXoDmr0?+XAt&~->L<^%R04z@6qN( zZt+^b*K}klxb<5Gx2L6%kdhsnK~75-wSM{Q4YqWu!zxZYw`l>b?IiE3B zm?vik&ZDzKC}_292afmjCO87`%zc=`VE(UlS-fgq%H$WsIQJMdKF3AL{3H|t);H%9 ze+Pep#)n%N%uj`_?JtnQwi7QSbEQu{cq(k-ACd7WHLFRS8Dsy zc!h2Fwl_CdZBt!#F!ie0#NQ$5{-(;ve*%6@t78+tZhKnCip2iUw&(smFY>B+*V+!; z^;OH;#lq|U>7E;L?(Z(KXT*kZd^6aAb)mt3Lk<3W^}th5%?YzLu)|I89P}toRKPa4 fi}ow%binZ+oYL{r!%}AV00000NkvXXu0mjfiJ*fB literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/new-design/leave_balance.png b/Mohem/src/assets/icon/new-design/leave_balance.png new file mode 100644 index 0000000000000000000000000000000000000000..c915cc7eeceed83b46d15d8587cffb827c6f63cb GIT binary patch literal 1324 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 UUs)QS-T(jq07*qoM6N<$f^ta7RsaA1 literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/new-design/medical_insurance.png b/Mohem/src/assets/icon/new-design/medical_insurance.png new file mode 100644 index 0000000000000000000000000000000000000000..21196156649bbbb7ffeb92bb5ac2d9d9c245566b GIT binary patch literal 815 zcmV+~1JL}5P)Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR919iRgM z1ONa40RR91A^-pY0N%nIJOBU!rAb6VR7efAl|5G5KomyDA_bvxR)ET!G;!(_%noo? zfOY^ou(AVK0op;FY#^dYT1=DH$_j8Ak|tK}XXbGfSuz+)-#M3gKQr&mXe8s@_KI2Z z6-u~-A@nLw^;=Lw;~IMeolB>gfHj(8tI;gPw2>3&L@KOi)zhVw%0ui7Y%_CgHIJcH zgOE}2w-5(kqX&(qD~uF!sLK;b;Rs9x#uOGIAYU~!x-+ny)<;dqz{68CW|B3k*D`-R zVA337xPa=ea{L0Gs}T!53_}6=$Dq?boKkk5@)Xx;^Qg}*ZM9#tC7R;#^{3&%U36N{ z-5o41igzFEYU=4Vf2*c6Jfp&-USRZ(J^u1ht;HUaI~ZzOg!Q8x>O5s>945`wbP=3hP8Divh=aXQ(^+u( zKB?88=|yU7T1Lxsu#9}zl>LVf%47 z$5!G5QYc_ex~rv&d_BS4XZ2XcPq1Uqqs`zyWq2iM>{7Z*)lHj<#srlV9=gyOMO3eV zAv7u_s!6vnf?brb*bXs%tWX{%t8we@9x0*?YrUGDKQecfR-+kc!5lnnqlC%UFxzHf zwXvE{p0HSJEJHaErINuJdOSV0v(g%M1^9;NcL5NGH{ t31t>w&8uTUJb~VnPPx#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR918lVFJ z1ONa40RR91Bme*a0C5nK*8l(mMM*?KR7efAlZ|m3HxNcWo)mB$1SPNoqXc#kqyk?D zLJ90Z=s@g1NCjdCx>OLlg5*64%Q?~xN7RhInWz2s2MZiM{_^GXlvw=~>%WHigxJ{m z;}iB?tjuIbn4V(C`yDd;N}b~0ut2C`cHm_f{J-xy*X9hV#PNwCiqDXyReT=8qvH#^j(}l zHSmnJ2T1TP6{g~K9@xSWCKI#+7r#K%>Zn;?qGq_j|5SMN6D!~jLqHl~o z_WxCBEs!71f3 literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/new-design/pay_slip.png b/Mohem/src/assets/icon/new-design/pay_slip.png new file mode 100644 index 0000000000000000000000000000000000000000..7aab9d1e6ba21dfcaf076d6a8c9f5f48f880fac2 GIT binary patch literal 1200 zcmV;h1W)^kP)Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91A)o^Q z1ONa40RR91B>(^b0Kf1duvPc0# z0F&+}5Uw$$w0QI{s96aIv}n(D$c{I5ZA-)0rn?;jIOI>ORNf!z-75MIy)Sxp4vOB9 zcSZ3|PLv-mi`Bnxi1MRlp+zINt=ah^C1~(m$BMDR>dRq^N2KRjTjffBLZW^!htRR*?pOO`V zvFYRR1!Sz!6`)_~SFj#YdoD5wc`-wMy+2r`(%{hfuUkrh-mDT6X4^n1z`t@3*1$9*xVC}KZH6>J&pZJEcHM)G3DhHF7=M`3B&_`-p)1e$iqP9S;xYFe|b znVON>aF!^#h}BdWQ?i9R8TTHNAF$$L&Z7_;8xzTe*(=$R&nBsClmK-cWQuq>^J;IZ zl~0&Z`@C8mOE}!$ceA*Zd(R;SqiI^wS`%|f&kjrmo;_Nhz4uw`{?9($r8>6O)I z2FLN*;$4ps6VZzL)1UP+s?{? zNv!BwV;2hl-Vz)W|T}ga1=IW4=((2f@<+DoWSmfKW@x1tz7Kto!^0k@> z6IePuC0?!-`4yW7G#B#VNh^S@YdE&0C4L5w$PH_KeYpS7e)0Ci3Eu(657*;ge?tX+ z;;1X&EjkF_tR1Ayl~r_n%B4SAa~_qEqntx1hA%3I89&>_J9h=!CW#lZTseh(zAEVG zS0>TOGXX^gpivEaJhlY>B9H{SL5yv(S3yLhb3i7@s7{x_epemu-ttb=w~q1WTlvfH z4iv;^pgbOA0G;Q-yPd=&4lx3f$ouKKox}SCS O0000Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91B%lKT z1ONa40RR91BLDyZ0K4WL)&Kwk)=5M`R9Fekmw|QKFcd{ePX}OwDihQjRGlDXf~XtN z3Bm@Y6U3b$bb`VFN^kizumvwe@C81B3`h>{LBEOuLKy~k;lz=6%lfw<$M>kFWT-7AT!T)||12Mf zWpD*;StdTVCnICk4-IuvUzxF;*~w(doYwTy%wa593ad|}Lxz+v0~s4rmg32V#x&w< z?-_dIXaAS$sfMN)e*|4eQQxmD)@WTXma(Ku)=n{$)5z3t8B7J0^w&kDK0_HRdNFTXaM0+GAthumZ!(7oyqSV>igVbz>6jsM2UXjQFP;DtYsrQzn{})XQl-Y7hV^E{RrO>{d5tt_o6&CZCKxNsKzFm$AW>>^$V_al zb3%qfB|L&QiVftDs#wF=T2;T~)3rKfj0=#FLwDKQ(hOq_V{1);6;a-d{s!8t`2rND zYDuCVgL!L%Y9!sGkjqtctxOB>ek4pucK*JJt-B;>?5^;q@v_FcmQQfiUbm19bV qbZ048@}vxupMwJ#`sb3Vi}VMcrO=@%eSh2l0000Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91DWC%Y z1ONa40RR91DgXcg0HjFVwEzGG0!c(cR9FeUmO*G7RT#(LCYxGK6IU%s8wxuS(Tke3 zhgKBbDFva2;?z^cLq>!k9?})@Ac!4B@F3U~FB*|<4$@wvyPiZ3JJC}r+Cc=tiaP

_rCYN?|t)TW)mUe$wYcB-jeRK`!*?2z+5IY zuVGBWG7!jxgGrCMVI34h8(A_Q3~LxHgK{vqUA~Qt*r*1S3^=YDNLzwso({HM>NE>m z?CfE_yhTn|)2YB}Hsu7ybT!}t&P_@SBRpV(S&#uP2#T>*@nBAD-^2<&vMR^{C2n*M zaL(t>y(0}jmF~ZWxB-H)FyK4tf}V=a6oG1hV{(D9u_I64%vWaWN4~E#c;v0=x@vgf zzTsDpM_GV1T%d!VDEPQpPy+^F!#qI)&4_(R55wK4TdUW^{L62O)n99zd`xEKU`x{P zi3vBUigKe1IKj1vcV63}g37vQz7!WfJuCLV|AxS6in(W}XwU!i=i)(?1DglB9MgKh z0WO%67G`UuBT`Jp$6q+Mp+Uy)-T$!vP=9>=J)u`-#7O?2Se%@=z zd7*d)V>U)g5(m}5<&K3*bZA$|_% zzy%cFJ2K0`b}6dK3>r8A7JvCz@;awyE-XiDw5K5Fw?MqZMS zJcIf*;DG|@NIF)r$zn&Vw_c9IIbG>!14+4#!Xc#>c1d0-;T{9 z$!#Z5<`}ROfqXt*FED4qUjStp>)PZ{fp=}SS;<5m^EZP{vu;D(o}?)&wR_k6+2XH) zA=ibChkz3fb~|2YQa2}QVkd6QyRU++#9YeuuiJDnvCn4jR;xJ&YgDss axA{NCVPIOkwog_70000pur00001b5ch_0Itp) z=>Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91C7=TU z1ONa40RR91C;$Ke085bPga7~pkV!;AR9FeUm(Ob)Wf;dNzcfn|vI-U(l}sYE2Ps*- zNKYB@(u2?yFZCb}LJwZd<{z-5mmag?v4@NYp|`A9@nkXu4=q}=rS(w3W?Cf07R;1Z zau94k-|4*Z&1AE?v)TBCPu}Nw-sgSZXP=!;6UXVSv!txU;~uDVF26ftcz0+=q>fjG z8YDY*Iy*XB?wnRELj^URO0i?x*_y7m?e)P>Bb(6dv6jm@eITuUlNze+quMHG)zp4! z?7ChBi>l0lQ?Le_a2*;@Sc6@jSSC-6wnNiZ6A!?H1j)0khCk zGn`AMOIk@2@t^`V_$FIfI;ug2&L^NoJ=nL(R8Y}4TLac23P@H%B7(lCMwKRbpyrHx z4A(fh)yH?USil-V74)1HR;y>KOqHZXC7+mU#g%8|W4Ol2R@Ja`a@)mRk92*)MX)F3 z;v3a48pdIDEjz$ogJp=Iuv$$jqRMCRR<2rX`I^8im`T`sN}GlO@S(5rsAf;fE?&Wj zz=OO30#QELPhU;BRzXe1Ovi-neZ@iu;J_48S_DYPG?@m3ps9FZq$ZXj zfm*i8SG=!M!FgB%H4%W3kD-`W_4$wPM-xIu0aU;ie|wm z%#1p#a&JQw5|GL;1q)Dt2B^Uh^14JI$_H)V$I)RG@xVxzBv8u&@)zMT#IOz?NZOMh zfRSPiP`+qFl%f0fl*^71d}yUALG90jE>&?4By-_1_7dpQyaEDs(4O*)>^dg4y@pt# zodPyvsDX-AKx#k;5j2NOrE|{U;2mt`6lQ32^!v%vr(PN0u%_@XM9_^wl0LK&U&q!I z)acr4pMK(u9yx4ncW-W7TyY-$cI&1d^m6yd(oC11UqJ|~V9tA`myg_@eCO>cVm<5X z$1BGMdpzCXTm;vw^X08S?oR#l@R1cNW^Vp+BR$YdQ*)e5vg@>ZnVl}be*UGCZ)|Jh zPv`gZ7q;2>ZpA*5+I(%!oeSTlw*8*kmDncG%=XOswAlFA0~(mP{K10r{2Rx&pRN0s zF4O4WPAPlVZk@luv$O6Dj~z7 z(lgdp<40$h#!TBBdvnlsy0l{}&$g}b{>-9Hd0ZD;R~p+Rrm6KsdZVkD{!fZQ@*#!@ z^70A95P?yE5oV76(t9T#jf{=`oB4&7`#=6v8hZAbrke6I3Kck@eAU QMgRZ+07*qoM6N<$f&zSIVgLXD literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/new-design/ticket_balance.png b/Mohem/src/assets/icon/new-design/ticket_balance.png new file mode 100644 index 0000000000000000000000000000000000000000..f769f41c055d87112edf27d4aec6beca4f5468e1 GIT binary patch literal 999 zcmVPx#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91FrWhf z1ONa40RR919smFU0EQ0VQvd)1T}ebiR9Fekm+@8GFc60Wum9r>@CLXOMBN}8U?w0; z5HSJi1W6|#od7Wb?gTXxkWP?(KS$yzj_jl~Kz{FizSG@VI$3sj3e0;U9u!pGd*op zjQrSQYwsVUu{5O<8n!o}`Zx>(4TIzD z0;`$~D(@TYAvI^RV#kDz{A$+;7>ZP=S0zYIOIo0mgOtx2?=Y8=X~H_1(SX+5Qv40% zWcB+iUBVD@kV;U4n)Do`2{=$plh3@5Ik-w@)T?VCscWLEBj<(w^q_(q&PpdRf+_q0 z3rqNDl`MD(UB5<#oKE~6^sBegqa&cFpTlR#vaotE&?QSkH6=(6nvZyh^9VJhlo3>o zC{hLQ6l<^L{5pBOUi=Zq@z@_Tm_z{`VHJ&2ZbtADWK+@ubE$-n71$@Zf;n_*pAFRh zZha#cFavF(Ph*ntrrWj81oC$9E#rMQQ2B`+R$PPiV3M*#T{5!{);&3;wB|l1-AuFM z>Kbo-u^4^r*?QPqLyclJXk5UdWSK~F8t9TCp&AS7;{{ym1PqBGsro40to=aX3S6APR}ac%FokAUPL7wuuKtnV{@!55JMM4STVHRm zk^%K#A;{pweQAwB>I4)I`i`@N63*ckGPnjwW2su3*Q>(|xz}LiwCkhPPWLAjW2jZx zw*ejBTt!GX=-4exK~jTOPC{x>yoWSz9VSj~pd^`t11Sf+%ev8ko_^R2?&m7Cftr>? zQ0|>2_8$Jg$j7>j^5Hd0)zk!a!vC$*2HKMv9|#TIFs^;9&z$rm`*JbD>E@?8;m3*i8l6lM4+?gLM_o`Do2RTgOSe4V* zoo{XtH>r0~J9BUWwFmQ|%2`cRuf5T`KN>mX4wL2Ey(U*ZO{RJdV VH@zR-a*6-|002ovPDHLkV1oVSxQGA% literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/new-design/ticket_request.png b/Mohem/src/assets/icon/new-design/ticket_request.png new file mode 100644 index 0000000000000000000000000000000000000000..f455ce2eb69a6919e75a8a431be7e7fed93dbc15 GIT binary patch literal 1060 zcmV+<1l#+GP)Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91FrWhf z1ONa40RR919smFU0EQ0VQvd)1nn^@KR9FekS3y?WFcg&1Zdl0LQYqp2MWnc1u^ro%?12e*1eV~V$EQw__D3MZq|6}( zn-D`_%&1d|=$n3wHZ}G(HZhXo8|qaH;Oir1dE>l};k`2qoDu7H4lpEXBSk0pYsGA9srn?(38z+{PD%sHyYRNp{VclC?SbqO&5YlFIOf=@2ttl^%*tzeL? zh!Mff5rPGJg<;wWTE=)_V(bv@I&p)+f|dalblvs_LIg38OQislCOAPv1EB6@)_N`x zhAHOZh#|=NYOwc!50&RHaSHZ8A0#4>33AXqkQjmrq>qDN8yn5q5n)6w-4Jx*9A3TU z{Ehthpb97$ns1;Fj=(7xgEMf`h%n(P*mN3&(D=s3AWywgjtUMweINWN#F&^lgkTe5 z2#kq9LV?*P?!mYRQ_zXvY3v0L^X`!N)Atwvgqu2 z@ScKfUEl*#F5$Jl)e7jyRBGXAot-pXgKa>;i!WMNEKd~QCA`+RS^@KyM97YiQU<}p zZJZo_i(4k5u9n24OSD%>wE~!+ka}P2=(D7IGUI4mHr>bDY+xzH5KC#Y!ctP%4exW| z(&TT}eXRg|v4m2{o_-d7_wfgpLIy47Dg1uc5%RjE?YvBjVskya2Dt88ecPO(lRX^U zxuVU)??4tYsuy5J;c~&oRi=x&WMO7Y$=1YQnL_-s2*^KuudII6OyRKOtNOBj--s7z zCyfO#2#4->T(T!6rH=4Hxko>N4SktgxXMq-!p;qa=D%JM(XGbUBbq&2%L6cFNMiw7 z%CqF)_=Z75_i@6TGBEj;jm!k!lBAi**>K#nQ0fK9d4wnLCkH302nv3VeW7K(p0${^ zBwyUNk+xO<5>GKRX~WMu`j77DzAZG^j5%-6=uW{i8gE6d0Ox@7PRKp1MJL9xN}Vxv zC+=v(GOh6@m#|s^Vm?9gUh?&Lyq6`(SE_W~1;i8<~KmCyYK3X4m`=&&b%NhDA_FK%Amm eM}?e1u!etfhEB3GO)PN$0000tN literal 0 HcmV?d00001 diff --git a/Mohem/src/assets/icon/new-design/uniform_request.png b/Mohem/src/assets/icon/new-design/uniform_request.png new file mode 100644 index 0000000000000000000000000000000000000000..3e104c708964a8b4fe2d0c26e20b79e75ffd4e4b GIT binary patch literal 1069 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 literal 0 HcmV?d00001 diff --git a/Mohem/src/theme/styles.scss b/Mohem/src/theme/styles.scss index 73b3023f..d1df6cd7 100644 --- a/Mohem/src/theme/styles.scss +++ b/Mohem/src/theme/styles.scss @@ -855,3 +855,17 @@ color: var(--dark); // left: 0; // width: 100%; // +// .employee-slider .custom-button{ +// padding: 13px !important; +// } +// .employee-slider .iconBox img{ +// max-width: 40% !important; +// } + +.slideFullWidth { + margin-left:-15px; + margin-right:-15px; +} +.slideFullWidth .swiper-container .swiper-wrapper .swiper-slide:first-child { + margin-left:15px; +} \ No newline at end of file diff --git a/Mohem/tsconfig.json b/Mohem/tsconfig.json index b271fd9f..1d9c2de7 100644 --- a/Mohem/tsconfig.json +++ b/Mohem/tsconfig.json @@ -18,5 +18,10 @@ "es2018", "dom" ] + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true } } + From 11432b633e2530ee9fa95362c338aca6f11dd7de Mon Sep 17 00:00:00 2001 From: umasoodch Date: Sun, 26 Jan 2020 09:11:04 +0300 Subject: [PATCH 05/15] timer added according to the shift hours --- Mohem/package.json | 2 +- Mohem/src/app/home/home.page.html | 42 ++++++++++++++++++------------- Mohem/src/app/home/home.page.scss | 20 ++++++++++++++- Mohem/src/app/home/home.page.ts | 25 +++++++++--------- 4 files changed, 57 insertions(+), 32 deletions(-) diff --git a/Mohem/package.json b/Mohem/package.json index 409df5c5..43033639 100755 --- a/Mohem/package.json +++ b/Mohem/package.json @@ -203,4 +203,4 @@ "android" ] } -} +} \ No newline at end of file diff --git a/Mohem/src/app/home/home.page.html b/Mohem/src/app/home/home.page.html index 4d425c4d..15daa898 100644 --- a/Mohem/src/app/home/home.page.html +++ b/Mohem/src/app/home/home.page.html @@ -138,25 +138,31 @@ --> +

+ Time Left Today + + - -{{displayTime}} - +
+ +

{{ 'attendance-tracking,title' | translate }}

+ + + +
+
\ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.scss b/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.scss new file mode 100644 index 00000000..811e2e55 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.scss @@ -0,0 +1,233 @@ + + +////////////////////book btn///////////////////// +ion-fab-button{ + --background: var(--darkblue)!important; + // background: url(/assets/icon/sliderBG.jpg); + background-size: cover; + background-position: top right; + border-radius: 50%; + height:110px; + width: 110px; +} +.cbookApointmentBtn{ + // --background:transparent !important; + + --background-focused: transparent; + --background-hover:transparent; + --background-activated: transparent; + --background: transparent; +} + + +.fab-p{ + // position: absolute; + // bottom: 0; + // left: 0; + // right: 0; + // line-height: 0; + // margin: 12px; + // margin-bottom: 28%; + // margin-top: 27px; + + position: absolute; + bottom: 0; + left: 0; + right: 0; + /* line-height: 0; */ + margin: 12px; + margin-bottom: 14%; + white-space: pre-line; + font-size: 13px; + } + +.fab-i{ + top:0px; + left:0px; +} + +button-inner{ + --top: -11px !important; +} + +.iconFab{ + margin-top: -37px; + width: 100px; + height: 60px; +} + + +////////////////animation///////////////////////// + + + +// .wrapper { +// position: fixed; +// width: 60px; +// height: 60px; +// margin: 0 auto; +// left: 65px; +// bottom: 84px; +// z-index: 100; +// } +// .wrapper1{ +// left:inherit; +// right: 65px; + + +// } +// .wrapper .circle { +// width: 110px; +// height: 110px; +// position: absolute; +// top: 0; +// left: -40px; +// right: 0; +// bottom: 20px; +// border-radius: 50%; +// margin: auto; +// -webkit-transform: scale(1, 1); +// transform: scale(1, 1); +// } + +.wrapper { + position: fixed; + width: 3cm; + height: 3cm; + /* margin: 0 auto; */ + bottom: 2.1cm; + padding: 0; + z-index: 100; +} +.wrapper1{ + left:inherit; + right: 65px; + +} + +.wrapper_left { + + left: 4%; +} +.wrapper_right { + right: 4%; +} + +.wrapper .circle { + width: 3.3cm; + height: 3.3cm; + position: absolute; + top: 0; + left: 0px; + right: 0; + bottom: 20px; + border-radius: 50%; + margin: auto; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); +} + + .wrapper .circle { + width: 110px; + height: 110px; + position: absolute; + top: 0; + left: 0px; + right: 0; + bottom: 20px; + border-radius: 50%; + margin: auto; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } + + + .wrapper .circle.pulse { + -webkit-animation-timing-function: ease; + animation-timing-function: ease; + -webkit-animation: pulse 2s infinite; + animation: pulse 2s infinite; + background-color: var(--ion-color-secondary-tint); + opacity: 0.7; + } + + + @-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } + 25% { + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } + 50% { + -webkit-transform: scale(1.2, 1.2); + transform: scale(1.2, 1.2); + } + 100% { + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } + } + + @keyframes pulse { + 0% { + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } + 25% { + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } + 50% { + -webkit-transform: scale(1.2, 1.2); + transform: scale(1.2, 1.2); + } + 100% { + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } + } + + + +@media only screen and (max-width: 350px) { + ion-fab-button{ + --background: var(--ion-color-secondary); + height:90px; + width: 90px; + left: 0px; + +} + .wrapper .circle { + width: 90px; + height: 90px; + position: absolute; + top: 0; + left: 0px; + right: 0; + bottom: 20px; + border-radius: 50%; + margin: auto; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } +} + + +.dashboard-container { + margin-bottom: 0.9cm; +} + +.clicked { + +} +.clicked:hover { + background-color: green; +} + + +.clicked:focus { + background-color: orange; +} \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.spec.ts b/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.spec.ts new file mode 100644 index 00000000..3d04ef70 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FabButtonComponent } from './fab-button.component'; + +describe('FabButtonComponent', () => { + let component: FabButtonComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FabButtonComponent ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FabButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.ts b/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.ts new file mode 100644 index 00000000..c61f785e --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit, Output, EventEmitter } from '@angular/core'; +import { TranslatorService } from '../../services/translator/translator.service'; + +@Component({ + selector: 'fab-button', + templateUrl: './fab-button.component.html', + styleUrls: ['./fab-button.component.scss'], +}) +export class FabButtonComponent implements OnInit { + + @Output() trigger = new EventEmitter(); + public direction: any; + constructor( + ) { } + + ngOnInit() { + this.direction = TranslatorService.getCurrentDirection(); + } + + public onClick() { + this.trigger.emit(); + } + +} diff --git a/Mohem/src/app/home/home.page.html b/Mohem/src/app/home/home.page.html index fe151468..c8fe1482 100644 --- a/Mohem/src/app/home/home.page.html +++ b/Mohem/src/app/home/home.page.html @@ -114,4 +114,6 @@ + +
diff --git a/Mohem/src/app/home/home.page.ts b/Mohem/src/app/home/home.page.ts index dee4f44b..ccb0f18d 100644 --- a/Mohem/src/app/home/home.page.ts +++ b/Mohem/src/app/home/home.page.ts @@ -471,7 +471,11 @@ showAttendanceTracking(){ } - + openattentracking(){ + this.common.openAttenTrackingpage(); + //this.cs.navigateForward('/eservices/doctors/search'); + + } } diff --git a/Mohem/src/assets/localization/i18n.json b/Mohem/src/assets/localization/i18n.json index e7adec94..a70beaab 100644 --- a/Mohem/src/assets/localization/i18n.json +++ b/Mohem/src/assets/localization/i18n.json @@ -2082,5 +2082,53 @@ "ar":"المجموع " } + }, + "attendance-tracking": { + "title":{ + "en": "Mark Attendance", + "ar":"Mark Attendance " + }, + "check-in":{ + "en": "Check In", + "ar":"Check In" + }, + "check-out":{ + "en": "Check Out", + "ar":"Check Out" + }, + "regular":{ + "en": "Regular", + "ar":"Regular" + }, + "late-in":{ + "en": "Late In", + "ar":"Late In" + }, + "today-time-left":{ + "en": "TODAY TIME LEFT", + "ar":"TODAY TIME LEFT" + }, + + + "confirm-alert1":{ + "en": "Are you sure, you want to", + "ar":"Are you sure, you want to" + }, + "confirm-alert2":{ + "en":" check out", + "ar":" check out" + }, + "confirm-alert3":{ + "en":"You did't complate today shift", + "ar":"You did't complate today shift" + }, + "shift-time":{ + "en":"SHIFT TIME", + "ar":"SHIFT TIME" } + + + + +} } \ No newline at end of file diff --git a/Mohem/src/theme/styles.scss b/Mohem/src/theme/styles.scss index 73b3023f..a274825f 100644 --- a/Mohem/src/theme/styles.scss +++ b/Mohem/src/theme/styles.scss @@ -845,7 +845,41 @@ color: var(--dark); margin: 8px !important; } +.checkOutOkBtn{ + margin-left: 55px !important; + margin-right: 55px !important; + margin-top: 10px !important; + margin-bottom: 10px !important; + border-radius: 5px !important; + height: 32px !important; + min-height: 30px !important; + background: var(--lightblue) !important; + -webkit-box-flex: 1; + flex: 1 1 auto; + border-top: 0.55px solid rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.2); + border-right: 0.55px solid rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.2); + color: white !important; + border: none !important; + +} + +.checkOutCancelBtn{ + margin-left: 55px !important; + margin-right: 55px !important; + margin-top: 10px !important; + margin-bottom: 10px !important; + border-radius: 5px !important; + height: 32px !important; + min-height: 30px !important; + background: var(--darkblue) !important; + -webkit-box-flex: 1; + flex: 1 1 auto; + border-top: 0.55px solid rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.2); + border-right: 0.55px solid rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.2); + color: white !important; + border: none !important; +} // .slides-gray-bullets .swiper-wrapper { // margin-top: 14px !important; // } diff --git a/Mohem/src/theme/variables.scss b/Mohem/src/theme/variables.scss index 33bb3b43..f50870c6 100644 --- a/Mohem/src/theme/variables.scss +++ b/Mohem/src/theme/variables.scss @@ -69,6 +69,10 @@ --red:#BE1E2D; --blue:#223262; --cyanblue:#1b75bc; + --darkblue:#094875;//dublicate in login branch + --lightblue:#3cb9d5;//dublicate in login branch + + // $font-family-base: $fontFamilyMediumEN !default; // $font-family-ios-base: $fontFamilyMediumEN !default; From 6d3dd907a608c3740a61b150ce6e5e840f437172 Mon Sep 17 00:00:00 2001 From: ashwaq Date: Mon, 27 Jan 2020 11:50:18 +0300 Subject: [PATCH 11/15] fix attend-tracking --- .../attendance-tracking/home/home.component.html | 4 ++-- .../attendance-tracking/home/home.component.ts | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Mohem/src/app/attendance-tracking/home/home.component.html b/Mohem/src/app/attendance-tracking/home/home.component.html index a391e4e3..b99c4ead 100644 --- a/Mohem/src/app/attendance-tracking/home/home.component.html +++ b/Mohem/src/app/attendance-tracking/home/home.component.html @@ -19,7 +19,7 @@
-
@@ -28,7 +28,7 @@ {{ts.trPK('attendance-tracking','shift-time')}}

- 08:00 - 17:00 + {{attendanceTrackingList.P_SHT_NAME}}
diff --git a/Mohem/src/app/attendance-tracking/home/home.component.ts b/Mohem/src/app/attendance-tracking/home/home.component.ts index 73884a0a..422355c2 100644 --- a/Mohem/src/app/attendance-tracking/home/home.component.ts +++ b/Mohem/src/app/attendance-tracking/home/home.component.ts @@ -13,7 +13,7 @@ export class HomeComponent implements OnInit { attendanceTrackingList:any =[]; cuurentDate:any; direction: string; - checkOut:boolean= true; + isCheckOut:boolean= false; constructor( public cs:CommonService, @@ -27,7 +27,7 @@ export class HomeComponent implements OnInit { this.direction = TranslatorService.getCurrentLanguageName(); this.cuurentDate =this.getHeaderDate(this.cuurentDate); //**condition to check is checkout or not to display PUSE Button** - // if(ischeckOut){ + // if(ischeckOutP_REMAINING_HOURS){ // this.checkOut=true; // }else{ // this.checkOut=false; @@ -49,8 +49,15 @@ export class HomeComponent implements OnInit { public handleRespondGetAttendanceTracking(result){ if (this.cs.validResponse(result)) { + if(result.GetAttendanceTrackingList != null){ this.attendanceTrackingList=result.GetAttendanceTrackingList; - + //**condition to check is checkout or not to display PUSE Button** + if(this.attendanceTrackingList.P_REMAINING_HOURS ==='00:00'){ + this.isCheckOut=true; + }else{ + this.isCheckOut=false; + } + } } } @@ -70,7 +77,7 @@ openDialog(){ this.cs.confirmAlertDialogAttendance( () => { //to open scan(); - + //this.cs.openScan(); }, this.ts.trPK('general', 'ok'), () => {}, this.ts.trPK('general', 'cancel'), this.ts.trPK('vacation-rule', 'confirmation'), From d1fbd343307fa1fd5b266c15d17ab868171e507f Mon Sep 17 00:00:00 2001 From: umasoodch Date: Mon, 27 Jan 2020 16:36:14 +0300 Subject: [PATCH 12/15] added logic for attendance --- .../dashbored/AttensanceTrackingList.ts | 15 +++-- .../dashbored/attendance-tracking.response.ts | 10 +-- .../stats-button/stats-button.component.scss | 2 +- Mohem/src/app/home/home.page.html | 12 ++-- Mohem/src/app/home/home.page.scss | 44 ++++++++++++- Mohem/src/app/home/home.page.ts | 66 ++++++++++++------- 6 files changed, 107 insertions(+), 42 deletions(-) diff --git a/Mohem/src/app/hmg-common/services/dashbored/AttensanceTrackingList.ts b/Mohem/src/app/hmg-common/services/dashbored/AttensanceTrackingList.ts index e4b22244..b5083234 100644 --- a/Mohem/src/app/hmg-common/services/dashbored/AttensanceTrackingList.ts +++ b/Mohem/src/app/hmg-common/services/dashbored/AttensanceTrackingList.ts @@ -1,9 +1,10 @@ -export class AttendanceTrackingList{ - public SCHEDULED_HOURS :string; - public SPENT_HOURS : string; - public REMAINING_HOURS : string; - public RETURN_STATUS : string; - public RETURN_MSG : string; -} \ No newline at end of file +export class AttendanceTrackingList { + public P_REMAINING_HOURS: string; + public P_RETURN_MSG: string; + public P_RETURN_STATUS: string; + public P_SCHEDULED_HOURS: string; + public P_SHT_NAME: string; + public P_SPENT_HOURS: string; +} diff --git a/Mohem/src/app/hmg-common/services/dashbored/attendance-tracking.response.ts b/Mohem/src/app/hmg-common/services/dashbored/attendance-tracking.response.ts index 82ec2ae0..dd6ff457 100644 --- a/Mohem/src/app/hmg-common/services/dashbored/attendance-tracking.response.ts +++ b/Mohem/src/app/hmg-common/services/dashbored/attendance-tracking.response.ts @@ -1,8 +1,8 @@ -import { Response } from "src/app/hmg-common/services/models/response"; +import { Response } from 'src/app/hmg-common/services/models/response'; import { AttendanceTrackingList } from './AttensanceTrackingList'; - - export class AttendanceTrackingResponse extends Response{ - public GetGetAttendanceTrackingList : AttendanceTrackingList[]; - } \ No newline at end of file + +export class AttendanceTrackingResponse extends Response { + public GetGetAttendanceTrackingList: AttendanceTrackingList[]; + } diff --git a/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.scss b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.scss index 272fad14..d2cfa8ae 100644 --- a/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.scss +++ b/Mohem/src/app/hmg-common/ui/stats-button/stats-button.component.scss @@ -24,7 +24,7 @@ .titleBox { display: block; span { - font-size: 35px; + font-size: 30px; font-weight: bold; color: black; text-align: left; diff --git a/Mohem/src/app/home/home.page.html b/Mohem/src/app/home/home.page.html index 603de802..f587bb81 100644 --- a/Mohem/src/app/home/home.page.html +++ b/Mohem/src/app/home/home.page.html @@ -2,7 +2,9 @@ DASHBOARD - +
+ +
@@ -139,7 +141,7 @@
--> -
+
Time Left Today - +
+
+ + Monthly Attendance
- diff --git a/Mohem/src/app/home/home.page.scss b/Mohem/src/app/home/home.page.scss index be31b62d..118eda9d 100644 --- a/Mohem/src/app/home/home.page.scss +++ b/Mohem/src/app/home/home.page.scss @@ -6,6 +6,18 @@ ion-row { .header-toolbar-new{ --background: #22c6b3; } +.profile-image-container{ + position: relative; + z-index: 999; + img { + width: 32px; + float: right; + margin-top: -42px; + border-radius: 20px; + height: 32px; + margin-right: 4px; + } +} ion-title{ color: white; position: absolute; @@ -98,6 +110,36 @@ ion-label{ width: 80%; text-align: center; font-size: 11px; - text-transform: uppercase;; + text-transform: uppercase; + } +} + +.attendance-timer { + position: fixed; + bottom: 20px; + right: 20px; + z-index: 2; + height: 112px; + width: 112px; + background-color: #094875; + border-radius: 50%; + display: inline-block; + img { + position: absolute; + left: 33%; + top: 8%; + width: 35%; + } + span { + position: absolute; + left: 50%; + top: 70%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + color: white; + width: 80%; + text-align: center; + font-size: 11px; + text-transform: uppercase; } } diff --git a/Mohem/src/app/home/home.page.ts b/Mohem/src/app/home/home.page.ts index 08a232f5..fedf18e7 100644 --- a/Mohem/src/app/home/home.page.ts +++ b/Mohem/src/app/home/home.page.ts @@ -70,7 +70,7 @@ export class HomePage implements OnInit { icon: 'assets/icon/new-design/missing_swipe.png' }, { - title: 'Leave Balance', // getAccrualBalance ticket balance + title: 'Leave Balance', statsValue: 0, icon: 'assets/icon/new-design/leave_balance.png' }, @@ -108,15 +108,15 @@ export class HomePage implements OnInit { slidesPerView: 3.2, spaceBetween: 10 }; - public timeInSeconds: any = 0.15 * 60 * 60; - public time: any; public runTimer = false; public hasStarted = false; public hasFinished = false; public remainingTime: any; + public scheduledTime: any; + public isCheckedIn: any; public displayTime: any; public menuEntries: any; - public percent: any = 100 - ((this.timeInSeconds / 32400) * 100); + public percent: any; constructor( public ts: TranslatorService, @@ -146,18 +146,8 @@ export class HomePage implements OnInit { }); } - ionViewWillEnter() { - this.getAccrualBalance(); - } - ngOnInit() { this.getUserDetails(); - this.getMenu(); - this.setServicesPrivilage(); - this.initTimer(); - this.openNotificationsDashbored(); - this.showOpenMissingSwipes(); - this.showAttendanceTracking(); // this.getCount(); // this.events.subscribe('getNotCount', badge => { @@ -166,11 +156,10 @@ export class HomePage implements OnInit { } initTimer() { - this.time = this.timeInSeconds; this.runTimer = false; this.hasStarted = false; this.hasFinished = false; - this.remainingTime = this.timeInSeconds; + this.percent = 100 - ((this.remainingTime / this.scheduledTime) * 100); this.displayTime = this.getSecondsAsDigitalClock(this.remainingTime); this.startTimer(); } @@ -187,7 +176,7 @@ export class HomePage implements OnInit { this.remainingTime--; this.displayTime = this.getSecondsAsDigitalClock(this.remainingTime); if (this.remainingTime > 0) { - const newPercent: any = ((this.remainingTime / 32400) * 100).toFixed(2); + const newPercent: any = ((this.remainingTime / this.scheduledTime) * 100).toFixed(2); this.percent = 100 - newPercent; this.timerTick(); } else { @@ -262,7 +251,6 @@ export class HomePage implements OnInit { // } ionViewDidLoad() { - // this.getUserDetails(); this.geolocation .getCurrentPosition() .then(resp => { @@ -279,24 +267,31 @@ export class HomePage implements OnInit { } private getUserDetails() { + this.authService .loadAuthenticatedUser() .subscribe((user: AuthenticatedUser) => { if (user) { this.events.publish('setMenu'); this.userData = user; - // set User Info this.sharedData.setSharedData(this.userData, AuthenticatedUser.SHARED_DATA); - this.userImage = user.EMPLOYEE_IMAGE - ? 'data:image/png;base64,' + user.EMPLOYEE_IMAGE - : this.userImage; - console.log(user); + this.userImage = user.EMPLOYEE_IMAGE ? 'data:image/png;base64,' + user.EMPLOYEE_IMAGE : this.userImage; + this.callDashboardServices(); } else { console.log(user); } }); } + callDashboardServices() { + this.getMenu(); + this.setServicesPrivilage(); + this.openNotificationsDashbored(); + this.showOpenMissingSwipes(); + this.showAttendanceTracking(); + this.getAccrualBalance(); + } + public Vacation_Rule() { this.common.navigateForward('/vacation-rule/home'); } @@ -475,10 +470,29 @@ export class HomePage implements OnInit { }); } + convertInSeconds(time: any) { + const hours = parseInt(time[0], 10); + const minutes = parseInt(time[1], 10); + const seconds = (hours * 60 * 60) + (minutes * 60); + return seconds; + } + + convertAndAssignTime(data) { + console.log(data); + this.remainingTime = this.convertInSeconds(data.P_REMAINING_HOURS.split(':')); + this.scheduledTime = this.convertInSeconds(data.P_SCHEDULED_HOURS.split(':')); + this.isCheckedIn = this.remainingTime === this.scheduledTime ? true : false; + this.initTimer(); + console.log('remainingTime: ' + this.remainingTime); + console.log('scheduledTime: ' + this.scheduledTime); + console.log('isCheckedIn: ' + this.isCheckedIn); + } + showAttendanceTracking() { // spent hours left hours this.DS.getAttendanceTracking() .subscribe((result: AttendanceTrackingResponse) => { if (this.common.validResponse(result)) { - console.log(result); + const key = 'GetAttendanceTrackingList'; + this.convertAndAssignTime(result[key]); } }); } @@ -567,6 +581,10 @@ export class HomePage implements OnInit { } }); } + + openProfilePage() { + this.common.openProfile(); + } } From 4fe49bdb181867da9838d8476020947985291fc7 Mon Sep 17 00:00:00 2001 From: ashwaq Date: Mon, 27 Jan 2020 17:04:49 +0300 Subject: [PATCH 13/15] add attend scan service + fix design alert --- .../home/home.component.ts | 17 +-- Mohem/src/app/hmg-common/hmg-common.module.ts | 8 +- .../attend-scan.service.spec.ts | 12 ++ .../attend-services/attend-scan.service.ts | 123 ++++++++++++++++++ Mohem/src/app/home/home.page.ts | 4 +- Mohem/src/theme/styles.scss | 21 +++ 6 files changed, 172 insertions(+), 13 deletions(-) create mode 100644 Mohem/src/app/hmg-common/services/attend-services/attend-scan.service.spec.ts create mode 100644 Mohem/src/app/hmg-common/services/attend-services/attend-scan.service.ts diff --git a/Mohem/src/app/attendance-tracking/home/home.component.ts b/Mohem/src/app/attendance-tracking/home/home.component.ts index 422355c2..d091003d 100644 --- a/Mohem/src/app/attendance-tracking/home/home.component.ts +++ b/Mohem/src/app/attendance-tracking/home/home.component.ts @@ -1,9 +1,9 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, EventEmitter, Output } from '@angular/core'; import { CommonService } from "src/app/hmg-common/services/common/common.service"; import { DashboredService } from 'src/app/hmg-common/services/dashbored/dashbored.service'; import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service'; +import {AttendScanService} from '../../hmg-common/services/attend-services/attend-scan.service' import { AttendanceTrackingResponse } from 'src/app/hmg-common/services/dashbored/attendance-tracking.response'; - @Component({ selector: 'app-home', templateUrl: './home.component.html', @@ -18,7 +18,8 @@ export class HomeComponent implements OnInit { constructor( public cs:CommonService, public db:DashboredService, - public ts:TranslatorService + public ts:TranslatorService, + public AttendScanService:AttendScanService ) { } ngOnInit() { @@ -26,13 +27,6 @@ export class HomeComponent implements OnInit { this.cuurentDate = new Date(); this.direction = TranslatorService.getCurrentLanguageName(); this.cuurentDate =this.getHeaderDate(this.cuurentDate); - //**condition to check is checkout or not to display PUSE Button** - // if(ischeckOutP_REMAINING_HOURS){ - // this.checkOut=true; - // }else{ - // this.checkOut=false; - // } - } // call services @@ -52,7 +46,7 @@ export class HomeComponent implements OnInit { if(result.GetAttendanceTrackingList != null){ this.attendanceTrackingList=result.GetAttendanceTrackingList; //**condition to check is checkout or not to display PUSE Button** - if(this.attendanceTrackingList.P_REMAINING_HOURS ==='00:00'){ + if(this.attendanceTrackingList.P_REMAINING_HOURS !='0'){ this.isCheckOut=true; }else{ this.isCheckOut=false; @@ -78,6 +72,7 @@ openDialog(){ () => { //to open scan(); //this.cs.openScan(); + this.AttendScanService.getDeviceLocation(); }, this.ts.trPK('general', 'ok'), () => {}, this.ts.trPK('general', 'cancel'), this.ts.trPK('vacation-rule', 'confirmation'), diff --git a/Mohem/src/app/hmg-common/hmg-common.module.ts b/Mohem/src/app/hmg-common/hmg-common.module.ts index 8a9169e3..83d0ed82 100644 --- a/Mohem/src/app/hmg-common/hmg-common.module.ts +++ b/Mohem/src/app/hmg-common/hmg-common.module.ts @@ -104,6 +104,9 @@ import{ConfirmLoginComponent} from '../authentication/confirm-login/confirm-logi import{WelcomeComponent} from './ui/welcome-login/welcome.component' import {DashboredService} from './services/dashbored/dashbored.service' import {FabButtonComponent} from './ui/fab-button/fab-button.component' +import { AttendScanService } from './services/attend-services/attend-scan.service'; +import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; + @NgModule({ imports: [ CommonModule, @@ -233,6 +236,7 @@ import {FabButtonComponent} from './ui/fab-button/fab-button.component' ], providers: [ + AttendScanService, DashboredService, ConnectorService, TranslatorService, @@ -272,7 +276,9 @@ import {FabButtonComponent} from './ui/fab-button/fab-button.component' File, //PaymentService, MenuService, - OpenNativeSettings + OpenNativeSettings, + BarcodeScanner, + ] }) export class HmgCommonModule { } diff --git a/Mohem/src/app/hmg-common/services/attend-services/attend-scan.service.spec.ts b/Mohem/src/app/hmg-common/services/attend-services/attend-scan.service.spec.ts new file mode 100644 index 00000000..b38b6ba2 --- /dev/null +++ b/Mohem/src/app/hmg-common/services/attend-services/attend-scan.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { AttendScanService } from './attend-scan.service'; + +describe('AttendScanService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: AttendScanService = TestBed.get(AttendScanService); + expect(service).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/hmg-common/services/attend-services/attend-scan.service.ts b/Mohem/src/app/hmg-common/services/attend-services/attend-scan.service.ts new file mode 100644 index 00000000..dc780d83 --- /dev/null +++ b/Mohem/src/app/hmg-common/services/attend-services/attend-scan.service.ts @@ -0,0 +1,123 @@ +import { Injectable } from '@angular/core'; +// import { DevicePermissionsService } from '../device-permissions/device-permissions.service'; +import { DomSanitizer } from '@angular/platform-browser'; +import { SharedDataService } from '../shared-data-service/shared-data.service'; +import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; +import { AttendanceService } from 'src/app/home/services/attendance.services'; +import { ZBar } from '@ionic-native/zbar/ngx'; +import { Geolocation } from "@ionic-native/geolocation/ngx"; +import { attendanceSwipeScannerRequest } from 'src/app/home/models/attendanceSwipe.Request'; +import { AuthenticatedUser } from '../authentication/models/authenticated-user'; +import { CommonService } from '../common/common.service'; +import { TranslatorService } from '../translator/translator.service'; +import { Response } from "src/app/hmg-common/services/models/response"; +import { Camera, CameraOptions,PictureSourceType} from "@ionic-native/Camera/ngx"; +import { DevicePermissionsService } from '../../services/device-permissions/device-permissions.service' +import { Device } from "@ionic-native/device/ngx"; + + +@Injectable({ + providedIn: 'root' +}) +export class AttendScanService { + location: boolean; + camera: boolean; + lat: any; + longt: any; + deviceID: string; + scannedResult: any; + userData: any = {}; + constructor(private device: Device, + private zbar: ZBar, + private geolocation: Geolocation, + private attendance_service: AttendanceService, + private barcodeScanner: BarcodeScanner, + private cameraController: Camera, + public sharedData: SharedDataService, + private sanitizer: DomSanitizer, + private permissions: DevicePermissionsService, + public common:CommonService, + public ts: TranslatorService,) { + this.userData =this.common.sharedService.getSharedData(AuthenticatedUser.SHARED_DATA,false); + } + + public getDeviceLocation() { + let isVirtual = this.device.isVirtual; + if(isVirtual==true){ + alert("emulater>>>>>>>"+isVirtual); + alert("You are using virtual device"); + return false; + } + + this.permissions.requestLocationAutherization().then(granted => { + this.location = granted as boolean; + if (this.location) { + this.geolocation + .getCurrentPosition({ maximumAge: 3000, timeout: 10000, enableHighAccuracy: true }) + .then(resp => { + // console.log(resp.coords.latitude); + // console.log(resp.coords.longitude); + this.lat = resp.coords.latitude; + this.longt = resp.coords.longitude; + this.attendance(); + }) + .catch(error => { + console.log("Error getting location", error); + }); + + } else { + return false; + } + }); + + } + + public attendance() { + this.permissions.requestCameraAutherization().then(granted => { + this.camera = granted as boolean; + if (this.camera) { + this.scanCode(); + } + } + ); + } + + + public scanCode() { + this.barcodeScanner.scan().then(barcodeData => { + console.log('Barcode data', barcodeData); + // let strResult = JSON.parse(barcodeData); + // console.log(strResult.QRValue); + this.scannedResult = barcodeData; + this.deviceID = this.device.uuid; + this.swipeAttendance(); + }).catch(err => { + console.log('Error', err); + }); + } + + + public swipeAttendance() { + let request: attendanceSwipeScannerRequest = new attendanceSwipeScannerRequest(); + request.Latitude = this.lat; + request.Longitude = this.longt; + request.QRValue = this.scannedResult.text; + request.UID = this.deviceID; + request.UserName = this.userData.EMPLOYEE_NUMBER; + console.log("request"); + console.log(JSON.stringify(request)); + this.attendance_service + .attendanceSwipeScanner(request, () => { + console.log("Error inside in swipe attendance"); + }) + .subscribe((result: Response) => { + if (this.common.validResponse(result)) { + console.log("response"); + console.log(result); + this.common.presentAlert(this.ts.trPK("home", "swipeAlertSuccess")); + } else { + this.common.presentAlert(this.ts.trPK("home", "swipeAlertFailed")); + } + }); + } +} diff --git a/Mohem/src/app/home/home.page.ts b/Mohem/src/app/home/home.page.ts index ccb0f18d..238610af 100644 --- a/Mohem/src/app/home/home.page.ts +++ b/Mohem/src/app/home/home.page.ts @@ -336,7 +336,9 @@ export class HomePage implements OnInit { } ); } - + parentFn($event: string) { + console.log($event); // this will output 'hello from child' + } scanCode() { // this.zbar // .scan(this.zbarOptions) diff --git a/Mohem/src/theme/styles.scss b/Mohem/src/theme/styles.scss index 4943eceb..a9a34688 100644 --- a/Mohem/src/theme/styles.scss +++ b/Mohem/src/theme/styles.scss @@ -279,6 +279,7 @@ ion-datetime.datetime.datetime-ios.ng-valid.ng-dirty.ng-touched { .alert-md .alert-head,.alert-ios .alert-head{ background-color:var(--grayBG); color: var(--light); + } /********profile grid************/ // .profile-grid{ @@ -952,3 +953,23 @@ border:0px width: 315px; } +.alert-button-group.sc-ion-alert-md, +.alert-button.sc-ion-alert-ios { + text-align: center; +} + + +.alert-message.sc-ion-alert-md, +.alert-message.sc-ion-alert-ios, +.alert-sub-title.sc-ion-alert-md, +.alert-title.sc-ion-alert-md, +.alert-sub-title.sc-ion-alert-ios, +.alert-title.sc-ion-alert-ios { + + text-align: center; +} + +.alert-button-inner.sc-ion-alert-md { + + justify-content: center !important; +} \ No newline at end of file From 9b58f9e9e00cc630327c2a8c82223453ffe66380 Mon Sep 17 00:00:00 2001 From: ashwaq Date: Mon, 27 Jan 2020 17:06:33 +0300 Subject: [PATCH 14/15] add --- Mohem/src/app/attendance-tracking/home/home.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mohem/src/app/attendance-tracking/home/home.component.ts b/Mohem/src/app/attendance-tracking/home/home.component.ts index d091003d..276b32ab 100644 --- a/Mohem/src/app/attendance-tracking/home/home.component.ts +++ b/Mohem/src/app/attendance-tracking/home/home.component.ts @@ -46,7 +46,7 @@ export class HomeComponent implements OnInit { if(result.GetAttendanceTrackingList != null){ this.attendanceTrackingList=result.GetAttendanceTrackingList; //**condition to check is checkout or not to display PUSE Button** - if(this.attendanceTrackingList.P_REMAINING_HOURS !='0'){ + if(this.attendanceTrackingList.P_REMAINING_HOURS ==='0'){ this.isCheckOut=true; }else{ this.isCheckOut=false; From f7002f3eae54ef693062aca9d618266bd1d76351 Mon Sep 17 00:00:00 2001 From: umasoodch Date: Wed, 29 Jan 2020 09:14:14 +0300 Subject: [PATCH 15/15] completed dashboard and attendance timer work --- .../home/home.component.html | 40 +++-- .../home/home.component.scss | 7 +- .../home/home.component.ts | 145 ++++++++++++------ Mohem/src/app/hmg-common/hmg-common.module.ts | 8 +- .../ui/fab-button/fab-button.component.scss | 30 +--- Mohem/src/app/home/home.module.ts | 8 +- Mohem/src/app/home/home.page.html | 52 +++---- Mohem/src/app/home/home.page.scss | 58 +++---- Mohem/src/app/home/home.page.ts | 12 +- 9 files changed, 207 insertions(+), 153 deletions(-) diff --git a/Mohem/src/app/attendance-tracking/home/home.component.html b/Mohem/src/app/attendance-tracking/home/home.component.html index b99c4ead..1a28a602 100644 --- a/Mohem/src/app/attendance-tracking/home/home.component.html +++ b/Mohem/src/app/attendance-tracking/home/home.component.html @@ -10,21 +10,41 @@
- - {{cuurentDate}}
- {{ts.trPK('attendance-tracking','today-time-left')}} - - - -
+ {{curentDate}}
+ {{ts.trPK('attendance-tracking','today-time-left')}} + +
+ + +
+
-
- {{ts.trPK('attendance-tracking','shift-time')}}

@@ -55,7 +75,5 @@
- -
\ No newline at end of file diff --git a/Mohem/src/app/attendance-tracking/home/home.component.scss b/Mohem/src/app/attendance-tracking/home/home.component.scss index 3df2c17a..f09a8a87 100644 --- a/Mohem/src/app/attendance-tracking/home/home.component.scss +++ b/Mohem/src/app/attendance-tracking/home/home.component.scss @@ -1,7 +1,7 @@ .timer-chart{ padding-top:18px; background: #094773; -height: 50%; +// height: 50%; text-align: center; } @@ -50,3 +50,8 @@ text-align: center; border-right: var(--lightblue) solid 1px; } +.fixed-shift-timer{ + margin-top: -50px; + margin-bottom: -30px; +} + diff --git a/Mohem/src/app/attendance-tracking/home/home.component.ts b/Mohem/src/app/attendance-tracking/home/home.component.ts index 276b32ab..a872b22a 100644 --- a/Mohem/src/app/attendance-tracking/home/home.component.ts +++ b/Mohem/src/app/attendance-tracking/home/home.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit, EventEmitter, Output } from '@angular/core'; -import { CommonService } from "src/app/hmg-common/services/common/common.service"; +import { CommonService } from 'src/app/hmg-common/services/common/common.service'; import { DashboredService } from 'src/app/hmg-common/services/dashbored/dashbored.service'; import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service'; -import {AttendScanService} from '../../hmg-common/services/attend-services/attend-scan.service' +import {AttendScanService} from '../../hmg-common/services/attend-services/attend-scan.service'; import { AttendanceTrackingResponse } from 'src/app/hmg-common/services/dashbored/attendance-tracking.response'; @Component({ selector: 'app-home', @@ -10,76 +10,125 @@ import { AttendanceTrackingResponse } from 'src/app/hmg-common/services/dashbore styleUrls: ['./home.component.scss'], }) export class HomeComponent implements OnInit { - attendanceTrackingList:any =[]; - cuurentDate:any; + attendanceTrackingList: any = []; + curentDate: any; direction: string; - isCheckOut:boolean= false; + isCheckOut = false; + public runTimer = false; + public hasStarted = false; + public hasFinished = false; + public remainingTime: any; + public scheduledTime: any; + public isCheckedIn = undefined; + public displayTime: any; + public percent: any; constructor( - public cs:CommonService, - public db:DashboredService, - public ts:TranslatorService, - public AttendScanService:AttendScanService + public cs: CommonService, + public db: DashboredService, + public ts: TranslatorService, + public attendScanService: AttendScanService ) { } ngOnInit() { - this.attendanceTracking(); - this.cuurentDate = new Date(); + this.showAttendanceTracking(); + this.curentDate = new Date(); this.direction = TranslatorService.getCurrentLanguageName(); - this.cuurentDate =this.getHeaderDate(this.cuurentDate); + this.curentDate = this.getHeaderDate(this.curentDate); } - // call services - public attendanceTracking(){ - this.db.getAttendanceTracking(()=> {},this.ts.trPK('general', 'retry')).subscribe( - (result)=>{ - console.log("result: "+result); - this.handleRespondGetAttendanceTracking(result); + initTimer() { + this.runTimer = false; + this.hasStarted = false; + this.hasFinished = false; + this.percent = 100 - ((this.remainingTime / this.scheduledTime) * 100); + this.displayTime = this.getSecondsAsDigitalClock(this.remainingTime); + this.startTimer(); + } - } - ) + startTimer() { + this.runTimer = true; + this.hasStarted = true; + this.timerTick(); } + timerTick() { + setTimeout(() => { + if (!this.runTimer) { return; } + this.remainingTime--; + this.displayTime = this.getSecondsAsDigitalClock(this.remainingTime); + if (this.remainingTime > 0) { + const newPercent: any = ((this.remainingTime / this.scheduledTime) * 100).toFixed(2); + this.percent = 100 - newPercent; + this.timerTick(); + } else { + this.hasFinished = true; + } + }, 1000); + } - public handleRespondGetAttendanceTracking(result){ - if (this.cs.validResponse(result)) { - if(result.GetAttendanceTrackingList != null){ - this.attendanceTrackingList=result.GetAttendanceTrackingList; - //**condition to check is checkout or not to display PUSE Button** - if(this.attendanceTrackingList.P_REMAINING_HOURS ==='0'){ - this.isCheckOut=true; - }else{ - this.isCheckOut=false; - } - } - } + getSecondsAsDigitalClock(inputSeconds: number) { + const secNum = parseInt(inputSeconds.toString(), 10); // don't forget the second param + const hours = Math.floor(secNum / 3600); + const minutes = Math.floor((secNum - (hours * 3600)) / 60); + const seconds = secNum - (hours * 3600) - (minutes * 60); + let hoursString = ''; + let minutesString = ''; + let secondsString = ''; + hoursString = (hours < 10) ? '0' + hours : hours.toString(); + minutesString = (minutes < 10) ? '0' + minutes : minutes.toString(); + secondsString = (seconds < 10) ? '0' + seconds : seconds.toString(); + return hoursString + ':' + minutesString + ':' + secondsString; + } + convertInSeconds(time: any) { + const hours = parseInt(time[0], 10); + const minutes = parseInt(time[1], 10); + let seconds = parseInt(time[2], 10); + seconds = seconds + (hours * 60 * 60) + (minutes * 60); + return seconds; } - getHeaderDate(date: any) { - if (this.direction == "en") { - return this.cs.getMonthName(date.getMonth() + 1) + ", " + date.getDate() +" "+ date.getFullYear(); - } else { - return this.cs.getMonthNameAr(date.getMonth() + 1) + ", " + date.getDate() +" "+ date.getFullYear(); + convertAndAssignTime(data) { + console.log(data); + this.remainingTime = this.convertInSeconds(data.P_REMAINING_HOURS.split(':')); + this.scheduledTime = this.convertInSeconds(data.P_SCHEDULED_HOURS.split(':')); + this.isCheckedIn = this.remainingTime === this.scheduledTime ? false : true; + this.initTimer(); + console.log('remainingTime: ' + this.remainingTime); + console.log('scheduledTime: ' + this.scheduledTime); + console.log('isCheckedIn: ' + this.isCheckedIn); + } + showAttendanceTracking() { + this.db.getAttendanceTracking() .subscribe((result: AttendanceTrackingResponse) => { + if (this.cs.validResponse(result)) { + const key = 'GetAttendanceTrackingList'; + this.convertAndAssignTime(result[key]); + this.attendanceTrackingList = result[key]; + } + }); + } + + getHeaderDate(date: any) { + if (this.direction === 'en') { + return this.cs.getMonthName(date.getMonth() + 1) + ', ' + date.getDate() + ' ' + date.getFullYear(); + } else { + return this.cs.getMonthNameAr(date.getMonth() + 1) + ', ' + date.getDate() + ' ' + date.getFullYear(); } } -openDialog(){ - +openDialog() { this.cs.confirmAlertDialogAttendance( () => { - //to open scan(); - //this.cs.openScan(); - this.AttendScanService.getDeviceLocation(); - }, this.ts.trPK('general', 'ok'), - () => {}, this.ts.trPK('general', 'cancel'), + this.attendScanService.getDeviceLocation(); + }, this.ts.trPK('general', 'ok'), + () => {}, this.ts.trPK('general', 'cancel'), this.ts.trPK('vacation-rule', 'confirmation'), - this.ts.trPK('attendance-tracking', 'confirm-alert3') - + "
"+"
"+ this.ts.trPK('attendance-tracking', 'confirm-alert1') + this.ts.trPK('attendance-tracking', 'confirm-alert3') + + '
' + '
' + this.ts.trPK('attendance-tracking', 'confirm-alert1') + this.ts.trPK('attendance-tracking', 'confirm-alert2') ); - } -}// end home +} diff --git a/Mohem/src/app/hmg-common/hmg-common.module.ts b/Mohem/src/app/hmg-common/hmg-common.module.ts index a3acc824..44dbe250 100644 --- a/Mohem/src/app/hmg-common/hmg-common.module.ts +++ b/Mohem/src/app/hmg-common/hmg-common.module.ts @@ -100,7 +100,7 @@ import {DashboredService} from './services/dashbored/dashbored.service' import {FabButtonComponent} from './ui/fab-button/fab-button.component' import { AttendScanService } from './services/attend-services/attend-scan.service'; import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; - +import { NgCircleProgressModule } from 'ng-circle-progress'; @NgModule({ imports: [ CommonModule, @@ -110,7 +110,8 @@ import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; HttpClientModule, NgxChartsModule, ListboxModule, - PdfViewerModule + PdfViewerModule, + NgCircleProgressModule.forRoot() ], declarations: [ FabButtonComponent, @@ -228,7 +229,8 @@ import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; AccordinCustomComponent, StatsButtonComponent, ServicesButtonComponent, - ConfirmLoginComponent + ConfirmLoginComponent, + NgCircleProgressModule ], providers: [ AttendScanService, diff --git a/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.scss b/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.scss index 811e2e55..e6cfd86d 100644 --- a/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.scss +++ b/Mohem/src/app/hmg-common/ui/fab-button/fab-button.component.scss @@ -7,8 +7,8 @@ ion-fab-button{ background-size: cover; background-position: top right; border-radius: 50%; - height:110px; - width: 110px; + height:112px; + width: 112px; } .cbookApointmentBtn{ // --background:transparent !important; @@ -114,32 +114,18 @@ button-inner{ } .wrapper .circle { - width: 3.3cm; - height: 3.3cm; - position: absolute; - top: 0; - left: 0px; - right: 0; - bottom: 20px; - border-radius: 50%; - margin: auto; - -webkit-transform: scale(1, 1); - transform: scale(1, 1); -} - - .wrapper .circle { - width: 110px; - height: 110px; + width: 112px; + height: 112px; position: absolute; - top: 0; - left: 0px; + top: 118%; + left: -10%; right: 0; bottom: 20px; border-radius: 50%; margin: auto; -webkit-transform: scale(1, 1); - transform: scale(1, 1); - } + transform: scale(1, 1); +} .wrapper .circle.pulse { diff --git a/Mohem/src/app/home/home.module.ts b/Mohem/src/app/home/home.module.ts index 781a20ec..3df41b48 100644 --- a/Mohem/src/app/home/home.module.ts +++ b/Mohem/src/app/home/home.module.ts @@ -6,7 +6,7 @@ import { HmgCommonModule } from '../hmg-common/hmg-common.module'; import { IonicModule } from '@ionic/angular'; import { HomePage } from './home.page'; import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; -import { NgCircleProgressModule } from 'ng-circle-progress'; + const routes: Routes = [ { path: '', @@ -20,14 +20,12 @@ const routes: Routes = [ FormsModule, IonicModule, HmgCommonModule, - RouterModule.forChild(routes), - // Specify ng-circle-progress as an import - NgCircleProgressModule.forRoot() + RouterModule.forChild(routes) ], declarations: [ HomePage ], - providers:[ + providers: [ BarcodeScanner ] }) diff --git a/Mohem/src/app/home/home.page.html b/Mohem/src/app/home/home.page.html index 8b0f8400..ab687c35 100644 --- a/Mohem/src/app/home/home.page.html +++ b/Mohem/src/app/home/home.page.html @@ -140,38 +140,32 @@ --> - -
+
Time Left Today + [backgroundColor]= "'#094875'" + [percent]="percent" + [radius]="50" + [outerStrokeWidth]="2" + [innerStrokeWidth]="0" + [outerStrokeColor]="'#ffffff'" + [animation]="true" + [animationDuration]="300" + [responsive]="false" + [space]="-4" + [startFromZero]="false" + [title]="displayTime" + titleFontWeight="bold" + [titleColor]="'#ffffff'" + [showUnits]="false" + subtitle="" + [subtitleColor]="'#ffffff'" + [clockwise]="false" + [renderOnClick]="false">
-
- - Monthly Attendance -
- +
+ +
- diff --git a/Mohem/src/app/home/home.page.scss b/Mohem/src/app/home/home.page.scss index 118eda9d..8143cf6e 100644 --- a/Mohem/src/app/home/home.page.scss +++ b/Mohem/src/app/home/home.page.scss @@ -114,32 +114,32 @@ ion-label{ } } -.attendance-timer { - position: fixed; - bottom: 20px; - right: 20px; - z-index: 2; - height: 112px; - width: 112px; - background-color: #094875; - border-radius: 50%; - display: inline-block; - img { - position: absolute; - left: 33%; - top: 8%; - width: 35%; - } - span { - position: absolute; - left: 50%; - top: 70%; - -webkit-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - color: white; - width: 80%; - text-align: center; - font-size: 11px; - text-transform: uppercase; - } -} +// .attendance-timer { +// position: fixed; +// bottom: 20px; +// right: 20px; +// z-index: 2; +// height: 112px; +// width: 112px; +// background-color: #094875; +// border-radius: 50%; +// display: inline-block; +// img { +// position: absolute; +// left: 33%; +// top: 8%; +// width: 35%; +// } +// span { +// position: absolute; +// left: 50%; +// top: 70%; +// -webkit-transform: translate(-50%, -50%); +// transform: translate(-50%, -50%); +// color: white; +// width: 80%; +// text-align: center; +// font-size: 11px; +// text-transform: uppercase; +// } +// } diff --git a/Mohem/src/app/home/home.page.ts b/Mohem/src/app/home/home.page.ts index 1130fd14..95e58003 100644 --- a/Mohem/src/app/home/home.page.ts +++ b/Mohem/src/app/home/home.page.ts @@ -113,7 +113,7 @@ export class HomePage implements OnInit { public hasFinished = false; public remainingTime: any; public scheduledTime: any; - public isCheckedIn: any; + public isCheckedIn = undefined; public displayTime: any; public menuEntries: any; public percent: any; @@ -442,6 +442,7 @@ export class HomePage implements OnInit { .subscribe((result: Response) => { if (this.common.validResponse(result)) { this.common.presentAlert(this.ts.trPK('home', 'swipeAlertSuccess')); + this.showAttendanceTracking(); } else { this.common.presentAlert(this.ts.trPK('home', 'swipeAlertFailed')); } @@ -477,7 +478,8 @@ export class HomePage implements OnInit { convertInSeconds(time: any) { const hours = parseInt(time[0], 10); const minutes = parseInt(time[1], 10); - const seconds = (hours * 60 * 60) + (minutes * 60); + let seconds = parseInt(time[2], 10); + seconds = seconds + (hours * 60 * 60) + (minutes * 60); return seconds; } @@ -485,14 +487,14 @@ export class HomePage implements OnInit { console.log(data); this.remainingTime = this.convertInSeconds(data.P_REMAINING_HOURS.split(':')); this.scheduledTime = this.convertInSeconds(data.P_SCHEDULED_HOURS.split(':')); - this.isCheckedIn = this.remainingTime === this.scheduledTime ? true : false; + this.isCheckedIn = this.remainingTime === this.scheduledTime ? false : true; this.initTimer(); console.log('remainingTime: ' + this.remainingTime); console.log('scheduledTime: ' + this.scheduledTime); console.log('isCheckedIn: ' + this.isCheckedIn); } - showAttendanceTracking() { // spent hours left hours + showAttendanceTracking() { this.DS.getAttendanceTracking() .subscribe((result: AttendanceTrackingResponse) => { if (this.common.validResponse(result)) { const key = 'GetAttendanceTrackingList'; @@ -586,7 +588,7 @@ export class HomePage implements OnInit { }); } - openattentracking(){ + openattentracking() { this.common.openAttenTrackingpage(); }