/// <summary>
        /// Used to filter data from database for DataTable
        /// </summary>
        /// <param name="filterData"></param>
        /// <param name="loggedInUserRole"></param>
        /// <returns></returns>
        public DataTableFilteredData GetUsersDataTable(UserManagementDataTable filterData, UserRole loggedInUserRole)
        {
            var data = new Data.UserMethods().GetUsersDataTable(loggedInUserRole);

            //Performing filter action
            var userData = (from e in data
                            where (filterData.Search.Value == null ||
                                                 e.Email.Contains(filterData.Search.Value, StringComparison.OrdinalIgnoreCase) ||
                                                 e.UserName.Contains(filterData.Search.Value, StringComparison.OrdinalIgnoreCase)
                                )
                            select e);

            //Sorting
            var sortingData = filterData.Order.FirstOrDefault();

            if (sortingData != null)
                switch (sortingData.Column)
                {
                    case 0:
                        userData = sortingData.Dir == "asc" ? userData.OrderBy(m => m.UserName) : userData.OrderByDescending(m => m.UserName);
                        break;
                    case 1:
                        userData = sortingData.Dir == "asc" ? userData.OrderBy(m => m.Email) : userData.OrderByDescending(m => m.Email);
                        break;
                    case 2:
                        userData = sortingData.Dir == "asc" ? userData.OrderBy(m => m.TimeZoneRecords) : userData.OrderByDescending(m => m.TimeZoneRecords);
                        break;

                }

            var userModelDataTables = userData as UserModelDataTable[] ?? userData.ToArray();
            var userDataFiltering = userModelDataTables.Skip(filterData.Start).Take(filterData.Length);

            //Creating Table Object
            var records = userDataFiltering.Select(dataCurrent => new List<string>
            {
                dataCurrent.UserName, dataCurrent.Email, Convert.ToString(dataCurrent.TimeZoneRecords),Convert.ToString(dataCurrent.UserId)
            }).ToList();

            //

            return new DataTableFilteredData
            {
                draw = filterData.Draw,
                recordsFiltered = userModelDataTables.Count(),
                recordsTotal = data.Count,
                error = "",
                data = records
            };
        }
        /// <summary>
        /// Used to get all the Records of the user, If userId==0 then al records to be returned
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="pageNo"></param>
        /// <param name="records"></param>
        /// <param name="recordPageNo"></param>
        /// <returns></returns>
        public List<UserTimeZoneEntryModel> GetUserTimeZoneInformation(int userId, int pageNo, int records, int recordPageNo, int recordPageEntries, BusinessClasses.UserRole role)
        {
            var returnData = new List<UserTimeZoneEntryModel>();
            if (userId != 0)
            {
                var userInfo = new Data.UserMethods().GetUserInformationBasedOnId(userId);
                if (userInfo == null)
                    throw new EntryNotFound();
                var userRecords = new Data.TimeZoneEntryMethods().GetAllTimeZoneBasedOnId(recordPageNo, recordPageEntries, userId);

                returnData.Add(new UserTimeZoneEntryModel
                {
                    UserId = userInfo.UserId,
                    UserName = userInfo.UserName,
                    EmailId = userInfo.Email,
                    TimeZoneEntries = userRecords.Select(m => new TimeZoneEntryModel
                    {
                        UserId = m.UserId,
                        EntryName = m.EntryName,
                        City = m.City,
                        TimeZoneEntryId = m.Id,
                        HourDifference = new TimeSpan(m.Difference).Hours,
                        MinuteDifference = new TimeSpan(m.Difference).Minutes,
                        CurrentTimeCity = DateTime.UtcNow + new TimeSpan(m.Difference)
                    }).ToList()
                });

            }
            else
            {
                returnData = new Data.UserMethods().GetAllUsers(pageNo, records, role).Select(c => new UserTimeZoneEntryModel
                    {
                        EmailId = c.Email,
                        UserId = c.UserId,
                        UserName = c.UserName,
                        TimeZoneEntries = new Data.TimeZoneEntryMethods().GetAllTimeZoneBasedOnId(recordPageNo, recordPageEntries, c.UserId).Select(
                        m => new TimeZoneEntryModel
                        {
                            UserId = m.UserId,
                            EntryName = m.EntryName,
                            City = m.City,
                            TimeZoneEntryId = m.Id,
                            HourDifference = new TimeSpan(m.Difference).Hours,
                            MinuteDifference = new TimeSpan(m.Difference).Minutes,
                            CurrentTimeCity = DateTime.UtcNow + new TimeSpan(m.Difference)
                        }).ToList()
                    }).ToList();
            }
            return returnData;
        }
 /// <summary>
 /// Used to get user information based on token
 /// </summary>
 /// <param name="token"></param>
 /// <returns></returns>
 public UserModel GetUserInformationBasedOnToken(string token)
 {
     try
     {
         var tokenInfo = new Data.TokenMethods().GetTokenInformation(token);
         if (tokenInfo == null)
             return null;
         var userInfo = new Data.UserMethods().GetUserInformationBasedOnId(tokenInfo.UserId);
         if (userInfo == null)
             return null;
         return new UserModel
         {
             Email = userInfo.Email,
             UserId = userInfo.UserId,
             UserName = userInfo.UserName,
             Role = userInfo.Role
         };
     }
     catch (Exception ex)
     { return null; }
 }
 /// <summary>
 /// Public constructor.
 /// </summary>
 public UserServices()
 {
     _userMethod = new Data.UserMethods();
 }