public static void TrackUsersActivityByUserId_V2(Guid userGuid) { UsersActivityLogRepository usersActivityLogRepository = new UsersActivityLogRepository(); UserRepository userRepository = new UserRepository(); var activities = usersActivityLogRepository.GetUsersActivityLogByUserId(userGuid); if (activities != null && activities.Count > 0) { //Get Login Activity. var loginActivity = activities.Where(m => m.PageName == Pages.LOGIN).FirstOrDefault(); //Check Login Activity Exist. if (loginActivity != null) { var userId = LogInManager.LoggedInUserId; //Get Logout Activity which tracked after current login. var logoutActivity = activities.Where(m => m.PageName == Pages.LOGOUT && m.SessionId == loginActivity.SessionId && (m.RecordedOn.Value > loginActivity.RecordedOn.Value) ).FirstOrDefault(); //Check Logout Activity Exist then update logged in duration. if (logoutActivity != null) { //Check Logout Activity already updated with logged in duration. If No then update logged in duration. if (logoutActivity.LoggedInDurationInSeconds.HasValue == false) { DateTime logoutTime = logoutActivity.RecordedOn.Value; var loginTime = loginActivity.RecordedOn.HasValue ? loginActivity.RecordedOn.Value : logoutTime.AddMinutes(-1); //Calculate logged in duration seconds. TimeSpan span = logoutTime.Subtract(loginTime); double? loggedInDurationInSeconds = Math.Abs(Math.Round(span.TotalSeconds, 0)); //Update logged in duration in seconds. usersActivityLogRepository.UpdateLoggedInDurationInUsersActivity(logoutActivity.Id, loggedInDurationInSeconds, userId); } //Update Flag IsLoggedIn = false. userRepository.UpdateIsLoggedInFlag(userGuid, false); } else { //If Logout Activity not exist then create logout activity and then calcualte logged in duration. DateTime recordedOn = DateTime.Now; var environment = Utility.GetConfigValue("Environment"); var siteDomainURL = Utility.GetSiteDomainURL(environment); //Add logout activity. UsersActivityLogVM usersActivityLog = new UsersActivityLogVM(); usersActivityLog.UserId = loginActivity.UserId; usersActivityLog.Url = string.Format("{0}{1}", siteDomainURL, "Account/SignOut"); usersActivityLog.PageName = Pages.LOGOUT; usersActivityLog.Description = "Loggedout successfully."; usersActivityLog.IpAddress = loginActivity.IpAddress; usersActivityLog.CreatedBy = loginActivity.CreatedBy.Value; usersActivityLog.IsActive = true; usersActivityLog.RecordedOn = recordedOn; usersActivityLog.SessionId = loginActivity.SessionId; string newGUID = usersActivityLogRepository.AddUsersActivityLog(usersActivityLog); //Calculate logged in duration and update value. DateTime logoutTime = recordedOn; var loginTime = loginActivity.RecordedOn.HasValue ? loginActivity.RecordedOn.Value : logoutTime.AddMinutes(-1); //Calculate logged in duration seconds. TimeSpan span = logoutTime.Subtract(loginTime); double? loggedInDurationInSeconds = Math.Abs(Math.Round(span.TotalSeconds, 0)); //Update logged in duration in seconds. usersActivityLogRepository.UpdateLoggedInDurationInUsersActivity(Guid.Parse(newGUID), loggedInDurationInSeconds, loginActivity.CreatedBy.Value); //Update Flag IsLoggedIn = false. userRepository.UpdateIsLoggedInFlag(userGuid, false); } } } }
public static TrackActivityStatus TrackUsersActivityByUserId(Guid userGuid) { UsersActivityLogRepository usersActivityLogRepository = new UsersActivityLogRepository(); UserRepository userRepository = new UserRepository(); var activities = usersActivityLogRepository.GetUsersActivityLogByUserId(userGuid); if (activities != null && activities.Count > 0) { //Get Login Activity. var loginActivity = activities.Where(m => m.PageName == Pages.LOGIN).FirstOrDefault(); //Check Login Activity Exist. if (loginActivity != null) { var userId = LogInManager.LoggedInUserId; //Get Logout Activity which tracked after current login. var logoutActivity = activities.Where(m => m.PageName == Pages.LOGOUT && m.SessionId == loginActivity.SessionId && (m.RecordedOn.Value > loginActivity.RecordedOn.Value) ).FirstOrDefault(); //Check Logout Activity Exist then update logged in duration. if (logoutActivity != null) { //Check Logout Activity already updated with logged in duration. If No then update logged in duration. if (logoutActivity.LoggedInDurationInSeconds.HasValue == false) { DateTime logoutTime = logoutActivity.RecordedOn.Value; var loginTime = loginActivity.RecordedOn.HasValue ? loginActivity.RecordedOn.Value : logoutTime.AddMinutes(-1); //Calculate logged in duration seconds. TimeSpan span = logoutTime.Subtract(loginTime); double? loggedInDurationInSeconds = Math.Abs(Math.Round(span.TotalSeconds, 0)); //Update logged in duration in seconds. usersActivityLogRepository.UpdateLoggedInDurationInUsersActivity(logoutActivity.Id, loggedInDurationInSeconds, userId); } //Update Flag IsLoggedIn = false. userRepository.UpdateIsLoggedInFlag(userGuid, false); return(TrackActivityStatus.RedirectLogin); } else { //Update current session id to login activity. usersActivityLogRepository.UpdateSessionIdInUsersActivity(loginActivity.Id, LogInManager.LoggedInUserSessionId, userId); return(TrackActivityStatus.Success); } } } //Update Flag IsLoggedIn = false. userRepository.UpdateIsLoggedInFlag(userGuid, false); return(TrackActivityStatus.RedirectLogin); }