diff --git a/src/app/login/LoginComponent.ts b/src/app/login/LoginComponent.ts
index 964394d..45573e2 100644
--- a/src/app/login/LoginComponent.ts
+++ b/src/app/login/LoginComponent.ts
@@ -326,24 +326,28 @@
                     this.sharedService.passwordToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays,
                         this.passwordExpireMessage, this.passwordMessage);
                 } else {
-                    if (this.accountNoOfDays === '1') {
-                        this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRETOMORROW');
-                        this.accountMessage = '';
-                        this.accountNoOfDays = '';
-                    } else if (this.accountNoOfDays === '0') {
-                        this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRETODAY');
-                        this.accountMessage = '';
-                        this.accountNoOfDays = '';
-                    } else {
-                        this.accountExpireMessage = this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRE');
-                        this.accountMessage = this.translateService.instant('PAGE.LOGIN.DAYS');
-                    }
-                    this.sharedService.showToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays, this.accountNoOfDays,
-                        this.passwordExpireMessage, this.accountExpireMessage, this.passwordMessage, this.accountMessage);
+                    this.accountDaysCheck();
                 }
             }
         }
     }
+    /** To check account no.of days with 0 & 1 @public */
+    public accountDaysCheck(): void {
+        if (this.accountNoOfDays === '1') {
+            this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRETOMORROW');
+            this.accountMessage = '';
+            this.accountNoOfDays = '';
+        } else if (this.accountNoOfDays === '0') {
+            this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRETODAY');
+            this.accountMessage = '';
+            this.accountNoOfDays = '';
+        } else {
+            this.accountExpireMessage = this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRE');
+            this.accountMessage = this.translateService.instant('PAGE.LOGIN.DAYS');
+        }
+        this.sharedService.showToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays, this.accountNoOfDays,
+            this.passwordExpireMessage, this.accountExpireMessage, this.passwordMessage, this.accountMessage);
+    }
     /** To display account expiry Toaster with required data @public */
     public accountExpiryToaster(): void {
         if (!isNullOrUndefined(this.accountNoOfDays)) {
@@ -364,24 +368,28 @@
                     this.sharedService.accountToaster(this.lastLogin, this.failedAttempts,
                         this.accountNoOfDays, this.accountExpireMessage, this.accountMessage);
                 } else {
-                    if (this.passwordNoOfDays === '1') {
-                        this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRETOMORROW');
-                        this.passwordMessage = '';
-                        this.passwordNoOfDays = '';
-                    } else if (this.passwordNoOfDays === '0') {
-                        this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRETODAY');
-                        this.passwordMessage = '';
-                        this.passwordNoOfDays = '';
-                    } else {
-                        this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRE');
-                        this.passwordMessage = this.translateService.instant('PAGE.LOGIN.DAYS');
-                    }
-                    this.sharedService.showToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays, this.accountNoOfDays,
-                        this.passwordExpireMessage, this.accountExpireMessage, this.passwordMessage, this.accountMessage);
+                    this.passwordDaysCheck();
                 }
             }
         }
     }
+    /** To check password no.of days with 0 & 1 @public */
+    public passwordDaysCheck(): void {
+        if (this.passwordNoOfDays === '1') {
+            this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRETOMORROW');
+            this.passwordMessage = '';
+            this.passwordNoOfDays = '';
+        } else if (this.passwordNoOfDays === '0') {
+            this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRETODAY');
+            this.passwordMessage = '';
+            this.passwordNoOfDays = '';
+        } else {
+            this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRE');
+            this.passwordMessage = this.translateService.instant('PAGE.LOGIN.DAYS');
+        }
+        this.sharedService.showToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays, this.accountNoOfDays,
+            this.passwordExpireMessage, this.accountExpireMessage, this.passwordMessage, this.accountMessage);
+    }
     /** To display password & account expiry Toaster with required data @public */
     public showToaster(): void {
         if (!isNullOrUndefined(this.accountNoOfDays) && !isNullOrUndefined(this.passwordNoOfDays)) {
