Exemplo n.º 1
0
        /// <summary>
        /// Binds the grid.
        /// </summary>
        private void BindGrid()
        {
            var rockContext = new RockContext();

            var campaignConnectionItems = Rock.Web.SystemSettings.GetValue(CampaignConnectionKey.CAMPAIGN_CONNECTION_CONFIGURATION).FromJsonOrNull <List <CampaignItem> >() ?? new List <CampaignItem>();

            var relatedOpportunityIds = campaignConnectionItems.Select(a => a.OpportunityGuid).ToList();
            List <ConnectionOpportunity> relatedOpportunities      = new List <ConnectionOpportunity>();
            Dictionary <Guid, int>       activeOpportunityRequests = new Dictionary <Guid, int>();

            if (relatedOpportunityIds.Any())
            {
                var connectionOpportunityService = new ConnectionOpportunityService(rockContext);
                var connectionRequestService     = new ConnectionRequestService(rockContext);
                var connectionRequestsQry        = connectionRequestService.Queryable();
                relatedOpportunities = connectionOpportunityService.GetListByGuids(relatedOpportunityIds);
                foreach (var connectionOpportunity in relatedOpportunities)
                {
                    var activeRequestCount = connectionRequestsQry
                                             .Where(a => a.ConnectionOpportunityId == connectionOpportunity.Id &&
                                                    (a.ConnectionState == ConnectionState.Active ||
                                                     (a.ConnectionState == ConnectionState.FutureFollowUp && a.FollowupDate.HasValue && a.FollowupDate.Value < _midnightToday)))
                                             .Count();

                    activeOpportunityRequests.AddOrReplace(connectionOpportunity.Guid, activeRequestCount);
                }
            }

            var             relatedDataViewIds = campaignConnectionItems.Select(a => a.DataViewGuid).ToList();
            List <DataView> relatedDataViews   = new List <DataView>();

            if (relatedDataViewIds.Any())
            {
                var dataViewService = new DataViewService(rockContext);
                relatedDataViews = dataViewService.GetListByGuids(relatedDataViewIds);
            }

            var campaignConnectionRows = new List <CampaignConnectionRow>();
            var entitySetItemQry       = new EntitySetItemService(rockContext).Queryable();

            foreach (var campaignConnectionItem in campaignConnectionItems)
            {
                var campaignConnectionRow = new CampaignConnectionRow();
                campaignConnectionRow.Guid = campaignConnectionItem.Guid;
                campaignConnectionRow.Name = campaignConnectionItem.Name;
                campaignConnectionRow.ConnectionOpportunity = relatedOpportunities.FirstOrDefault(a => a.Guid == campaignConnectionItem.OpportunityGuid);
                campaignConnectionRow.DataView           = relatedDataViews.FirstOrDefault(a => a.Guid == campaignConnectionItem.DataViewGuid);
                campaignConnectionRow.ActiveRequests     = activeOpportunityRequests.GetValueOrNull(campaignConnectionItem.OpportunityGuid) ?? 0;
                campaignConnectionRow.PendingConnections = entitySetItemQry.Where(a => a.EntitySetId == campaignConnectionItem.EntitySetId).Count();
                campaignConnectionRow.IsActive           = campaignConnectionItem.IsActive;
                campaignConnectionRows.Add(campaignConnectionRow);
            }

            var qry = campaignConnectionRows.AsQueryable();

            SortProperty sortProperty = gCampaigns.SortProperty;

            if (sortProperty != null)
            {
                qry = qry.Sort(sortProperty);
            }
            else
            {
                qry = qry.OrderBy(g => g.Name);
            }

            gCampaigns.DataSource = qry.ToList();
            gCampaigns.DataBind();
        }