public SDKUser GetUser(string username)
        {
            var    impersonatedLogin  = _userImpersonationService.GetImpersonatedLoginFor(username);
            var    login              = username;
            string impersonatingLogin = null;

            if (impersonatedLogin != null)
            {
                _logger.LogDebug("Proxied user: setting {0} as the authenticated user being proxied by {1}", impersonatedLogin, username);
                login = impersonatedLogin;
                impersonatingLogin = username;
            }

            var dataSet     = _session.CreateDataSet();
            var userGeneric = dataSet.CreateGenericWithFields("user", "login_name");

            userGeneric.Filter.AddFilter(FilterType.Equals("login_name", login));

            var employeeGeneric  = userGeneric.TraverseWithFields("user2employee", "work_group", "first_name", "last_name");
            var privClassGeneric = userGeneric.TraverseWithFields("user_access2privclass", "class_name");
            var siteGeneric      = employeeGeneric.TraverseWithFields("supp_person_off2site", "name");
            var addressGeneric   = siteGeneric.TraverseWithFields("cust_primaddr2address");
            var timeZoneGeneric  = addressGeneric.TraverseWithFields("address2time_zone", "name");

            var queueGeneric = userGeneric.Traverse("user_assigned2queue");

            queueGeneric.DataFields.Add("title");

            userGeneric.Query();

            if (userGeneric.Count < 1)
            {
                _logger.LogWarn("Could not find user {0}.", username);
                return(null);
            }

            var employeeRow  = employeeGeneric.DataRows().First();
            var privClassRow = privClassGeneric.DataRows().First();
            var siteRow      = siteGeneric.DataRows().First();
            var queues       = findQueues(queueGeneric);
            var timezone     = findTimezone(timeZoneGeneric, username);

            return(new SDKUser
            {
                FirstName = employeeRow.AsString("first_name"),
                LastName = employeeRow.AsString("last_name"),
                SiteName = siteRow.AsString("name"),
                Workgroup = employeeRow.AsString("work_group"),
                PrivClass = privClassRow.AsString("class_name"),
                Login = userGeneric.Rows[0].AsString("login_name"),
                ImpersonatingLogin = impersonatingLogin,
                Queues = queues,
                Timezone = timezone
            });
        }