/// <summary>
        /// Binds the group members progress repeater.
        /// </summary>
        protected void BindGroupMembersProgressGrid(Group group, GroupMember gMember, RockContext rockContext)
        {
            IQueryable <GroupMember> groupMembersQuery;

            if (gMember != null)
            {
                groupMembersQuery = new GroupMemberService(rockContext).Queryable().Where(a => a.Id == gMember.Id);

                pnlHeader.Visible = false;
            }
            else
            {
                groupMembersQuery = new GroupMemberService(rockContext).Queryable().Where(a => a.GroupId == group.Id);
            }

            group.LoadAttributes(rockContext);
            var defaultIndividualFundRaisingGoal = group.GetAttributeValue("IndividualFundraisingGoal").AsDecimalOrNull();

            groupMembersQuery = groupMembersQuery.Sort(new SortProperty {
                Property = "Person.LastName, Person.NickName"
            });

            var entityTypeIdGroupMember = EntityTypeCache.GetId <Rock.Model.GroupMember>();

            var groupMemberList = groupMembersQuery.ToList().Select(a =>
            {
                var groupMember = a;
                groupMember.LoadAttributes(rockContext);

                var contributionTotal = new FinancialTransactionDetailService(rockContext).Queryable()
                                        .Where(d => d.EntityTypeId == entityTypeIdGroupMember &&
                                               d.EntityId == groupMember.Id)
                                        .Sum(d => (decimal?)d.Amount) ?? 0;

                var individualFundraisingGoal          = groupMember.GetAttributeValue("IndividualFundraisingGoal").AsDecimalOrNull();
                bool disablePublicContributionRequests = groupMember.GetAttributeValue("DisablePublicContributionRequests").AsBoolean();
                if (!individualFundraisingGoal.HasValue)
                {
                    individualFundraisingGoal = group.GetAttributeValue("IndividualFundraisingGoal").AsDecimalOrNull();
                }

                decimal percentageAchieved = 0;
                if (individualFundraisingGoal != null)
                {
                    percentageAchieved = individualFundraisingGoal == 0 ? 0 : contributionTotal / (0.01M * individualFundraisingGoal.Value);
                }

                var progressBarWidth = percentageAchieved;

                if (percentageAchieved >= 100)
                {
                    progressBarWidth = 100;
                }


                if (!individualFundraisingGoal.HasValue)
                {
                    individualFundraisingGoal = 0;
                }

                return(new
                {
                    FullName = groupMember.Person.FullName,
                    IndividualFundraisingGoal = (individualFundraisingGoal ?? 0.00M).ToString("0.##"),
                    ContributionTotal = contributionTotal.ToString("0.##"),
                    Percentage = percentageAchieved.ToString("0.##"),
                    CssClass = GetProgressCssClass(percentageAchieved),
                    ProgressBarWidth = progressBarWidth
                });
            }).ToList();

            this.GroupIndividualFundraisingGoal = groupMemberList.Sum(a => decimal.Parse(a.IndividualFundraisingGoal));
            this.GroupContributionTotal         = groupMemberList.Sum(a => decimal.Parse(a.ContributionTotal));
            this.PercentComplete  = decimal.Round(this.GroupContributionTotal == 0 ? 0 : this.GroupContributionTotal / (this.GroupIndividualFundraisingGoal * 0.01M), 2);
            this.ProgressCssClass = GetProgressCssClass(this.PercentComplete);

            rptFundingProgress.DataSource = groupMemberList;
            rptFundingProgress.DataBind();
        }