public async Task <ActionResult> Login(LoginViewModel vm)
        {
            try
            {
                _accountDataService = new AccountDataService(vm.UserId);

                User user = await _accountDataService.Login(vm.UserId);

                if (user == null)
                {
                    LoginViewModel lvm = new LoginViewModel();
                    lvm.IsError      = true;
                    lvm.UserId       = string.Empty;
                    lvm.ErrorMessage = "Invalid Pin, Please Try Again!";
                    return(await Task.Run(() => View("~/Views/Admin/Login.cshtml", lvm)));
                }
                else
                {
                    // Initialize VM with default values
                    // Creates Empty AppAuthToken
                    AdminViewModel _vm                 = new AdminViewModel().Init();
                    AppAuthToken   _emptyToken         = _vm.Token;
                    AppAuthToken   _authenticatedToken = new AppAuthToken().CreateAuthenticatedUserToken(_emptyToken, vm.UserId, DateTime.Now);
                    _vm.Token = _authenticatedToken;
                    return(await Task.Run(() => RedirectToAction("Index", _vm)));
                }
            }
            catch (Exception ex)
            {
                LogError("Admin", "Login", ex);
                return(ShowErrorView("Admin", "Login", ex));
            }
        }
        public async Task <ActionResult> Logout(AdminViewModel vm)
        {
            try
            {
                _accountDataService = new AccountDataService(vm.Token.User.UserId);

                await _accountDataService.Logout(vm.Token.User.UserId);

                // CAncel AppAuthToken
                AppAuthToken _oldToken       = vm.Token;
                AppAuthToken _cancelledToken = new AppAuthToken().CancelAuthenticatedUserToken(_oldToken);
                vm.Token = _cancelledToken;

                //TODO: Add Data from AdminViewModel.Data to SessionLog Table in SQLite DB

                // Clear Session
                Session.Clear();

                return(await Task.Run(() => RedirectToAction("Index", vm)));
            }
            catch (Exception ex)
            {
                LogError("Admin", "Logout", ex);
                return(ShowErrorView("Admin", "Logout", ex));
            }
        }