public ActionResult Index(int profileId = -1/*this is currently ignored but one for the future*/)
        {
            var model = new IndicatorGridModel
                                           {
                                               SortBy = "Sequence",
                                               SortAscending = true,
                                               CurrentPageIndex = 1,
                                               PageSize = 200
                                           };

            GetProfiles(model);
            GetDomains(model, null);

            Profile profile = null;
            var firstOrDefault = model.DomainList.FirstOrDefault();
            if (firstOrDefault != null)
            {
                profile = GetProfile(model.ProfileKey, Convert.ToInt32(firstOrDefault.Value), -1);
            }

            if (profile != null)
            {
                IQueryable<GroupingPlusName> indicators = profile.IndicatorNames.AsQueryable();

                model.Profile = profile;
                model.UrlKey = model.ProfileKey;

                var profileContact = _reader.GetUserByUserId(profile.ContactUserId);
                model.ContactUserName = profileContact.DisplayName;
                model.EmailAddress = profileContact.EmailAddress;

                AssignAreaTypeData(model, profile);

                var userPermissions = GetUserGroupPermissions();

                model.UserHasAssignedPermissions = userPermissions.Any();

                model.UserGroupPermissions = userPermissions.FirstOrDefault(x => x.ProfileId == _reader.GetProfileDetails(model.UrlKey).Id);

                indicators = indicators.Where(i => i.AreaTypeId == profile.SelectedAreaType);

                model.TotalRecordCount = indicators.Count();

                model.IndicatorNamesGrid = indicators
                    .Distinct()
                    .OrderBy(model.SortExpression)
                    .Skip((model.CurrentPageIndex - 1) * model.PageSize)
                    .Take(model.PageSize);
            }

            return View(ProfilesAndIndicators, model);
        }
        public void TestGetTestSiteUrl_DoNotIncludePracticeCodeInUrl()
        {
            IndicatorGridModel model = new IndicatorGridModel
            {
                ProfileKey = urlKey,
                SelectedGroupId = 1,
                SelectedAreaTypeId = 7
            };

            string url = CommonUtilities.GetTestSiteUrl(model);
            Assert.IsFalse(url.Contains("ati/7"));
            Assert.IsTrue(url.Contains("gid/1"));
            Assert.IsTrue(url.Contains(urlKey + "#"));
        }
        public void TestGetTestSiteUrl()
        {
            IndicatorGridModel model = new IndicatorGridModel
            {
                ProfileKey = urlKey,
                SelectedGroupId = 1,
                SelectedAreaTypeId = 2
            };

            string url = CommonUtilities.GetTestSiteUrl(model);
            Assert.IsTrue(url.Contains("ati/2"));
            Assert.IsTrue(url.Contains("gid/1"));
            Assert.IsTrue(url.Contains(urlKey + "#"));
        }
        private void GetDomains(IndicatorGridModel model, int? domainSequence)
        {
            var reloadedDomains = ReloadGridDomains(model.ProfileKey);

            if (domainSequence.HasValue)
            {
                model.SelectedGroupId =
                    reloadedDomains.Where(x => x.Sequence == domainSequence).Select(x => x.GroupId).FirstOrDefault();
            }
            else
            {
                model.SelectedGroupId = reloadedDomains.Select(x => x.GroupId).FirstOrDefault();
            }

            model.DomainList = new SelectList(reloadedDomains.OrderBy(g => g.Sequence), "Sequence", "GroupName");
        }
 private static void AssignAreaTypeData(IndicatorGridModel model, Profile profile)
 {
     var builder = new AreaTypeSelectListBuilder(profile.AreaTypes, profile.SelectedAreaType);
     model.SelectedAreaTypeId = builder.SelectedAreaTypeId;
     model.AreaTypeList = builder.SelectListItems;
 }
        public ActionResult SortPageAndFilter(int? domainSequence, int? indicatorId, string resetArea,
            int selectedAreaTypeId = -1, string search_text = "", string sortBy = "Sequence",
            bool ascending = true, int page = 1, int pageSize = 200, string profileKey = null)
        {
            var model = new IndicatorGridModel
                {
                    SortBy = sortBy,
                    SortAscending = @ascending,
                    CurrentPageIndex = page,
                    PageSize = pageSize
                };

            // Get all the profiles
            GetProfiles(model);
            var firstOrDefault = model.ProfileList.FirstOrDefault();
            if (firstOrDefault != null)
                model.ProfileKey = string.IsNullOrEmpty(profileKey) ? firstOrDefault.Value : profileKey;
            GetDomains(model, domainSequence);

            var areaTypeId = resetArea == "True"
                ? -1
                : selectedAreaTypeId;

            if (domainSequence == null)
            {
                var selectListItem = model.DomainList.FirstOrDefault();
                if (selectListItem != null)
                {
                    domainSequence = int.Parse(selectListItem.Value);
                }
            }

            Profile profile = null;
            if (domainSequence.HasValue)
            {
                profile = GetProfile(model.ProfileKey, domainSequence.Value, areaTypeId);
            }

            if (profile != null)
            {
                IQueryable<GroupingPlusName> indicators = profile.IndicatorNames.AsQueryable();

                AssignAreaTypeData(model, profile);

                model.Profile = profile;
                model.UrlKey = model.ProfileKey;

                var profileContact = _reader.GetUserByUserId(profile.ContactUserId);
                model.ContactUserName = profileContact.DisplayName;
                model.EmailAddress = profileContact.EmailAddress;

                // Filter indicators for any search terms
                if (indicatorId != null)
                {
                    indicators = indicators.Where(i => i.IndicatorId.ToString().Contains(indicatorId.ToString()));
                }

                if (string.IsNullOrEmpty(search_text) == false)
                {
                    indicators = indicators.Where(i => i.IndicatorName.ToLower().Contains(search_text.ToLower()));
                }

                // Filter indicators by area type
                indicators = indicators.Where(i => i.AreaTypeId == profile.SelectedAreaType);

                model.TotalRecordCount = indicators.Count();

                var userPermissions = GetUserGroupPermissions();

                model.UserHasAssignedPermissions = userPermissions.Any();

                model.UserGroupPermissions = userPermissions
                    .FirstOrDefault(x => x.ProfileId == _reader.GetProfileDetails(model.UrlKey).Id);

                model.IndicatorNamesGrid = indicators
                    .Skip((model.CurrentPageIndex - 1) * model.PageSize)
                    .Take(model.PageSize);
            }

            return View("ProfilesAndIndicators", model);
        }
 private void GetProfiles(IndicatorGridModel model)
 {
     var profiles = _reader.GetProfiles().OrderBy(x => x.Name);
     IList<ProfileDetails> profilesWithAssignedIndicators = profiles.ToList();
     var listOfProfiles = CommonUtilities.GetOrderedListOfProfiles(profilesWithAssignedIndicators);
     model.ProfileList = listOfProfiles;
     var firstOrDefault = model.ProfileList.FirstOrDefault();
     if (firstOrDefault != null) model.ProfileKey = firstOrDefault.Value;
 }
        public static string GetTestSiteUrl(IndicatorGridModel model)
        {
            string url = GetTestSiteUrl(model.ProfileKey) + "#gid/" + model.SelectedGroupId;

            var areaTypeId = model.SelectedAreaTypeId;
            if (areaTypeId != AreaTypeIds.GpPractice)
            {
                url += "/ati/" + model.SelectedAreaTypeId;
            }

            return url;
        }