コード例 #1
0
        /// <summary>
        /// Binds the grid.
        /// </summary>
        private void BindGrid()
        {
            OpportunitySummary opportunitySummary = null;

            if (SelectedOpportunityId.HasValue)
            {
                opportunitySummary = SummaryState.SelectMany(t => t.Opportunities.Where(o => o.Id == SelectedOpportunityId.Value)).FirstOrDefault();
            }

            if (opportunitySummary != null)
            {
                using (var rockContext = new RockContext())
                {
                    // Get queryable of all requests that belong to the selected opportunity, and user is authorized to view (based on security or connector group)
                    var requests = new ConnectionRequestService(rockContext)
                                   .Queryable().AsNoTracking()
                                   .Where(r =>
                                          r.ConnectionOpportunityId == SelectedOpportunityId.Value &&
                                          (
                                              !opportunitySummary.CampusSpecificConnector ||
                                              (r.CampusId.HasValue && opportunitySummary.ConnectorCampusIds.Contains(r.CampusId.Value))
                                          ));

                    // Filter by Requester
                    if (ppRequester.PersonId.HasValue)
                    {
                        requests = requests
                                   .Where(r =>
                                          r.PersonAlias != null &&
                                          r.PersonAlias.PersonId == ppRequester.PersonId.Value);
                    }

                    // Filter by Connector
                    if (tglMyOpportunities.Checked)
                    {
                        requests = requests
                                   .Where(r =>
                                          r.ConnectorPersonAlias != null &&
                                          r.ConnectorPersonAlias.PersonId == CurrentPersonId);
                    }
                    else if (ppConnector.PersonId.HasValue)
                    {
                        requests = requests
                                   .Where(r =>
                                          r.ConnectorPersonAlias != null &&
                                          r.ConnectorPersonAlias.PersonId == ppConnector.PersonId.Value);
                    }

                    // Filter by State

                    if (tglMyOpportunities.Checked)
                    {
                        requests = requests
                                   .Where(r => r.ConnectionState == ConnectionState.Active ||
                                          (r.ConnectionState == ConnectionState.FutureFollowUp && r.FollowupDate.HasValue && r.FollowupDate.Value < _midnightToday));
                    }
                    else
                    {
                        var  states         = new List <ConnectionState>();
                        bool futureFollowup = false;
                        foreach (string stateValue in cblState.SelectedValues)
                        {
                            futureFollowup = futureFollowup || stateValue.AsInteger() == -2;
                            var state = stateValue.ConvertToEnumOrNull <ConnectionState>();
                            if (state.HasValue)
                            {
                                states.Add(state.Value);
                            }
                        }
                        if (futureFollowup || states.Any())
                        {
                            requests = requests
                                       .Where(r =>
                                              (futureFollowup && r.ConnectionState == ConnectionState.FutureFollowUp &&
                                               r.FollowupDate.HasValue && r.FollowupDate.Value < _midnightToday) ||
                                              states.Contains(r.ConnectionState));
                        }
                    }

                    // Filter by Status
                    List <int> statusIds = cblStatus.SelectedValuesAsInt;
                    if (statusIds.Any())
                    {
                        requests = requests
                                   .Where(r => statusIds.Contains(r.ConnectionStatusId));
                    }

                    // Filter by Campus
                    List <int> campusIds = cblCampus.SelectedValuesAsInt;
                    if (campusIds.Count > 0)
                    {
                        requests = requests
                                   .Where(r =>
                                          r.Campus != null &&
                                          campusIds.Contains(r.CampusId.Value));
                    }

                    // Filter by Last Activity Note
                    List <int> lastActivityIds = cblLastActivity.SelectedValuesAsInt;
                    if (lastActivityIds.Any())
                    {
                        requests = requests
                                   .Where(r => lastActivityIds.Contains(
                                              r.ConnectionRequestActivities.OrderByDescending(a => a.CreatedDateTime).Select(a => a.ConnectionActivityTypeId).FirstOrDefault()));
                    }


                    SortProperty sortProperty = gRequests.SortProperty;
                    if (sortProperty != null)
                    {
                        requests = requests.Sort(sortProperty);
                    }
                    else
                    {
                        requests = requests
                                   .OrderBy(r => r.PersonAlias.Person.LastName)
                                   .ThenBy(r => r.PersonAlias.Person.NickName);
                    }

                    gRequests.DataSource = requests.ToList()
                                           .Select(r => new
                    {
                        r.Id,
                        r.Guid,
                        PersonId         = r.PersonAlias.PersonId,
                        Name             = r.PersonAlias.Person.FullNameReversed,
                        Campus           = r.Campus,
                        Group            = r.AssignedGroup != null ? r.AssignedGroup.Name : "",
                        Connector        = r.ConnectorPersonAlias != null ? r.ConnectorPersonAlias.Person.FullName : "",
                        LastActivity     = FormatActivity(r.ConnectionRequestActivities.OrderByDescending(a => a.CreatedDateTime).FirstOrDefault()),
                        LastActivityNote = gRequests.Columns[6].Visible ? r.ConnectionRequestActivities.OrderByDescending(
                            a => a.CreatedDateTime).Select(a => a.Note).FirstOrDefault() : "",
                        Status          = r.ConnectionStatus.Name,
                        StatusLabel     = r.ConnectionStatus.IsCritical ? "warning" : "info",
                        ConnectionState = r.ConnectionState,
                        StateLabel      = FormatStateLabel(r.ConnectionState, r.FollowupDate)
                    })
                                           .ToList();
                    gRequests.DataBind();

                    lOpportunityIcon.Text   = string.Format("<i class='{0}'></i>", opportunitySummary.IconCssClass);
                    lConnectionRequest.Text = String.Format("{0} Connection Requests", opportunitySummary.Name);
                }
            }
            else
            {
                pnlGrid.Visible = false;
            }
        }
コード例 #2
0
        private void BindGrids()
        {
            BindFilters();
            var viewableOppIds = viewableConnectionOpportunities.Select( x => x.Id ).ToList();

            var requests = new ConnectionRequestService( _rockContext ).Queryable()
                .Where( r => r.ConnectionRequestActivities.Any( a => a.CreatedDateTime > dateRange.LowerValue && a.CreatedDateTime < dateRange.UpperValue ) )
                .Where( r => viewableOppIds.Contains( r.ConnectionOpportunityId ) );

            var conOppId = rddConnectionOpportunity.SelectedValueAsId();
            if ( conOppId > 0 )
            {
                requests = requests.Where( r => r.ConnectionOpportunityId == conOppId );
            }

            var campId = campusPicker.SelectedValueAsId();
            if ( campId > 0 )
            {
                requests = requests.Where( r => r.CampusId == campId );
            }

            var connectorId = ppAssignedPerson.PersonId;
            if ( connectorId > 0 )
            {
                requests = requests.Where( r => r.ConnectorPersonAlias != null && r.ConnectorPersonAlias.PersonId == connectorId );
            }

            // Filter by State
            var midnightToday = RockDateTime.Today.AddDays( 1 );
            var states = new List<ConnectionState>();
            bool futureFollowup = false;
            foreach ( string stateValue in cblState.SelectedValues )
            {
                futureFollowup = futureFollowup || stateValue.AsInteger() == -2;
                var state = stateValue.ConvertToEnumOrNull<ConnectionState>();
                if ( state.HasValue )
                {
                    states.Add( state.Value );
                }
            }
            if ( futureFollowup || states.Any() )
            {
                requests = requests
                    .Where( r =>
                        ( futureFollowup && r.ConnectionState == ConnectionState.FutureFollowUp &&
                            r.FollowupDate.HasValue && r.FollowupDate.Value < midnightToday ) ||
                        states.Contains( r.ConnectionState ) );
            }

            // Filter by Status
            List<string> statusIds = cblStatus.SelectedValues;
            if ( statusIds.Any() )
            {
                requests = requests
                    .Where( r => statusIds.Contains( r.ConnectionStatus.Name ) );
            }

            SortProperty sortProperty = workflowReportTable.SortProperty;
            if ( sortProperty != null )
            {
                requests = requests.Sort( sortProperty );
            }
            else
            {
                requests = requests
                    .OrderBy( r => (r.ConnectionState != ConnectionState.Inactive && r.ConnectionState != ConnectionState.Connected ) ? 0 : 1 )
                    .ThenBy( r => r.ConnectorPersonAlias.Person.NickName )
                    .ThenBy( r => r.ConnectorPersonAlias.Person.LastName )
                    .ThenBy( r => r.ConnectionOpportunity.Name );
            }

            var requestsData = requests.ToList()
            .Select( r => new
            {
                r.Id,
                r.Guid,
                PersonId = r.PersonAlias.PersonId,
                Name = r.PersonAlias.Person.FullName,
                Campus = r.Campus,
                Group = r.AssignedGroup != null ? r.AssignedGroup.Name : "",
                Connector = r.ConnectorPersonAlias != null ? r.ConnectorPersonAlias.Person.FullName : "",
                LastActivity = FormatActivity( r.ConnectionRequestActivities.OrderByDescending( a => a.CreatedDateTime ).FirstOrDefault() ),
                CreatedDateTime = r.ConnectionRequestActivities.OrderByDescending( a => a.CreatedDateTime ).FirstOrDefault().CreatedDateTime,
                Opened = ( r.CreatedDateTime.HasValue ? ( r.CreatedDateTime.Value.ToShortDateString() + " " + r.CreatedDateTime.Value.ToShortTimeString() + " " ) : "" ) + "(<span class='small'>" + r.CreatedDateTime.ToRelativeDateString() + "</small>)",
                Status = r.ConnectionStatus.Name,
                StatusLabel = r.ConnectionStatus.IsCritical ? "warning" : "info",
                ConnectionState = r.ConnectionState,
                StateLabel = FormatStateLabel( r.ConnectionState, r.FollowupDate ),
                Opportunity = r.ConnectionOpportunity,
                Completed = r.ConnectionState != ConnectionState.Inactive && r.ConnectionState != ConnectionState.Connected ? 0 : 1,
                AgeInt = (DateTime.Now - r.CreatedDateTime).Value.Days
            } )
               .ToList();
            /*

            DateTime oneMonthAgo = DateTime.Now.AddMonths( -1 );
            DateTime twoMonthsAgo = DateTime.Now.AddMonths( -2 );
            DateTime threeMonthsAgo = DateTime.Now.AddMonths( -3 );
            IEnumerable<GroupedData> groupedRequestsData = null;

            switch ( rddlGroupBy.SelectedValue )
            {
                case "1":
                    workflowReportTable.Visible = false;
                    workflowGroupedReportTable.Visible = true;
                    workflowGroupedReportTableItemName = "Workflow";

                    groupedRequestsData = requestsData.GroupBy( x => x.Opportunity.Id ).Select( grp => new GroupedData
                    {
                        GroupedItem = grp.FirstOrDefault().Opportunity.Name,
                        Count = grp.Count(),
                        OneMonthOldStats = "Open: " + grp.Where( x => x.Status != "Inactive" && ( x.CreatedDateTime ?? DateTime.Now ) > oneMonthAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt < 30 ).Count(),
                        TwoMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < oneMonthAgo && ( x.CreatedDateTime ?? DateTime.Now ) > twoMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 30 && x.AgeInt < 60 ).Count(),
                        ThreeMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < twoMonthsAgo && ( x.CreatedDateTime ?? DateTime.Now ) > threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 60 && x.AgeInt < 90 ).Count(),
                        OlderThanThreeMonthsStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 90 ).Count(),
                        TotalStats = "Open: " + grp.Where( x => x.Completed == 0 ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 ).Count()
                    } ).OrderBy( x => x.GroupedItem );

                    workflowGroupedReportTable.DataSource = groupedRequestsData.ToList();
                    workflowGroupedReportTable.DataBind();
                    break;
                case "2":
                    workflowReportTable.Visible = false;
                    workflowGroupedReportTable.Visible = true;
                    workflowGroupedReportTableItemName = "Campus";

                    groupedRequestsData = requestsData.GroupBy( x => x.Campus.Id ).Select( grp => new GroupedData
                    {
                        GroupedItem = grp.FirstOrDefault().Campus.Name,
                        Count = grp.Count(),
                        OneMonthOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) > oneMonthAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt < 30 ).Count(),
                        TwoMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < oneMonthAgo && ( x.CreatedDateTime ?? DateTime.Now ) > twoMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 30 && x.AgeInt < 60 ).Count(),
                        ThreeMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < twoMonthsAgo && ( x.CreatedDateTime ?? DateTime.Now ) > threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 60 && x.AgeInt < 90 ).Count(),
                        OlderThanThreeMonthsStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 90 ).Count(),
                        TotalStats = "Open: " + grp.Where( x => x.Completed == 0 ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 ).Count()
                    } ).OrderBy( x => x.GroupedItem );

                    workflowGroupedReportTable.DataSource = groupedRequestsData.ToList();
                    workflowGroupedReportTable.DataBind();
                    break;
                case "3":
                    workflowReportTable.Visible = false;
                    workflowGroupedReportTable.Visible = true;
                    workflowGroupedReportTableItemName = "Assigned Worker";

                    groupedRequestsData = requestsData.GroupBy( x => x.AssignedEntityName ).Select( grp => new GroupedData
                    {
                        GroupedItem = grp.FirstOrDefault().AssignedEntityName,
                        Count = grp.Count(),
                        OneMonthOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) > oneMonthAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt < 30 ).Count(),
                        TwoMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < oneMonthAgo && ( x.CreatedDateTime ?? DateTime.Now ) > twoMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 30 && x.AgeInt < 60 ).Count(),
                        ThreeMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < twoMonthsAgo && ( x.CreatedDateTime ?? DateTime.Now ) > threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 60 && x.AgeInt < 90 ).Count(),
                        OlderThanThreeMonthsStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 90 ).Count(),
                        TotalStats = "Open: " + grp.Where( x => x.Completed == 0 ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 ).Count()
                    } ).OrderBy( x => x.GroupedItem );

                    workflowGroupedReportTable.DataSource = groupedRequestsData.ToList();
                    workflowGroupedReportTable.DataBind();
                    break;
                case "4":
                    workflowReportTable.Visible = false;
                    workflowGroupedReportTable.Visible = true;
                    workflowGroupedReportTableItemName = "Status";

                    groupedRequestsData = requestsData.GroupBy( x => x.Status ).Select( grp => new GroupedData
                    {
                        GroupedItem = grp.FirstOrDefault().Status,
                        Count = grp.Count(),
                        OneMonthOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) > oneMonthAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt < 30 ).Count(),
                        TwoMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < oneMonthAgo && ( x.CreatedDateTime ?? DateTime.Now ) > twoMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 30 && x.AgeInt < 60 ).Count(),
                        ThreeMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < twoMonthsAgo && ( x.CreatedDateTime ?? DateTime.Now ) > threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 60 && x.AgeInt < 90 ).Count(),
                        OlderThanThreeMonthsStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 90 ).Count(),
                        TotalStats = "Open: " + grp.Where( x => x.Completed == 0 ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 ).Count()
                    } ).OrderBy( x => x.GroupedItem );

                    workflowGroupedReportTable.DataSource = groupedRequestsData.ToList();
                    workflowGroupedReportTable.DataBind();
                    break;
                default:*/
            workflowReportTable.Visible = true;
                    workflowGroupedReportTable.Visible = false;

                    workflowReportTable.DataSource = requestsData;
                    workflowReportTable.DataKeyNames = new string[] { "Id" };
                    workflowReportTable.DataBind();
            /*
            break;
            }
            */

            //IQueryable<int> tmp = workflowData.AsQueryable().Where(x => x.Completed == 1).Select(x => ((x.CompletedDateTime - x.CreatedDateTime) ?? TimeSpan.Zero).Days);
            //int _0to90_AverageTime = tmp.Count() == 0 ? -1 : (int)tmp.Average();
            //rlWorkflowStats.Text = "Average time to completion is " + _0to90_AverageTime + " days.";

            System.Web.Script.Serialization.JavaScriptSerializer jsSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();

            List<object[]> campusCount = requestsData.GroupBy( wd => wd.Campus.Id ).Select( wd => new object[] { wd.FirstOrDefault().Campus.Name, wd.Count() } ).ToList();
            campusCount.Insert( 0, new string[] { "Campus", "Count" } );
            workflowChartData2 = jsSerializer.Serialize( campusCount ).EncodeHtml();

            List<object[]> wfTypeCount = requestsData.GroupBy( wd => wd.Opportunity.Id ).Select( wd => new object[] { wd.FirstOrDefault().Opportunity.Name, wd.Count() } ).ToList();
            wfTypeCount.Insert( 0, new string[] { "Workflow Type", "Count" } );
            workflowChartData3 = jsSerializer.Serialize( wfTypeCount ).EncodeHtml();

            List<object[]> statusCount = requestsData.GroupBy( wd => wd.Status ).Select( wd => new object[] { wd.FirstOrDefault().Status, wd.Count() } ).ToList();
            statusCount.Insert( 0, new string[] { "Status", "Count" } );
            workflowChartData4 = jsSerializer.Serialize( statusCount ).EncodeHtml();

            List<object[]> workerCount = requestsData.GroupBy( wd => wd.Connector ).Select( wd => new object[] { wd.FirstOrDefault().Connector, wd.Count() } ).ToList();
            workerCount.Insert( 0, new string[] { "Worker", "Count" } );
            workflowChartData5 = jsSerializer.Serialize( workerCount ).EncodeHtml();

            List<String> statuses = requestsData.GroupBy( wd => wd.Status ).Select( x => x.FirstOrDefault().Status ).ToList();

            List<object[]> ageList = requestsData.Select( wd => statuses.Select( x => x == wd.Status ? ( object ) wd.AgeInt : null ).ToArray() ).ToList();
            ageList.Insert( 0, statuses.ToArray() );
            workflowChartData1 = jsSerializer.Serialize( ageList ).EncodeHtml();
        }
コード例 #3
0
        /// <summary>
        /// Binds the grid.
        /// </summary>
        private void BindGrid()
        {
            OpportunitySummary opportunitySummary = null;

            if ( SelectedOpportunityId.HasValue )
            {
                opportunitySummary = SummaryState.SelectMany( t => t.Opportunities.Where( o => o.Id == SelectedOpportunityId.Value ) ).FirstOrDefault();
            }

            if ( opportunitySummary != null )
            {
                using ( var rockContext = new RockContext() )
                {

                    // Get queryable of all requests that belong to the selected opportunity, and user is authorized to view (based on security or connector group)
                    var requests = new ConnectionRequestService( rockContext )
                        .Queryable().AsNoTracking()
                        .Where( r =>
                            r.ConnectionOpportunityId == SelectedOpportunityId.Value &&
                            (
                                !opportunitySummary.CampusSpecificConnector ||
                                ( r.CampusId.HasValue && opportunitySummary.ConnectorCampusIds.Contains( r.CampusId.Value ) )
                            ) );

                    // Filter by Requester
                    if ( ppRequester.PersonId.HasValue )
                    {
                        requests = requests
                            .Where( r =>
                                r.PersonAlias != null &&
                                r.PersonAlias.PersonId == ppRequester.PersonId.Value );
                    }

                    // Filter by Connector
                    if ( tglMyOpportunities.Checked )
                    {
                        requests = requests
                            .Where( r =>
                                r.ConnectorPersonAlias != null &&
                                r.ConnectorPersonAlias.PersonId == CurrentPersonId );
                    }
                    else if ( ppConnector.PersonId.HasValue )
                    {
                        requests = requests
                            .Where( r =>
                                r.ConnectorPersonAlias != null &&
                                r.ConnectorPersonAlias.PersonId == ppConnector.PersonId.Value );
                    }

                    // Filter by State

                    if ( tglMyOpportunities.Checked )
                    {
                        requests = requests
                            .Where( r => r.ConnectionState == ConnectionState.Active ||
                                    ( r.ConnectionState == ConnectionState.FutureFollowUp && r.FollowupDate.HasValue && r.FollowupDate.Value < _midnightToday ) );
                    }
                    else
                    {
                        var states = new List<ConnectionState>();
                        bool futureFollowup = false;
                        foreach ( string stateValue in cblState.SelectedValues )
                        {
                            futureFollowup = futureFollowup || stateValue.AsInteger() == -2;
                            var state = stateValue.ConvertToEnumOrNull<ConnectionState>();
                            if ( state.HasValue )
                            {
                                states.Add( state.Value );
                            }
                        }
                        if ( futureFollowup || states.Any() )
                        {
                            requests = requests
                                .Where( r =>
                                    ( futureFollowup && r.ConnectionState == ConnectionState.FutureFollowUp &&
                                        r.FollowupDate.HasValue && r.FollowupDate.Value < _midnightToday ) ||
                                    states.Contains( r.ConnectionState ) );
                        }
                    }

                    // Filter by Status
                    List<int> statusIds = cblStatus.SelectedValuesAsInt;
                    if ( statusIds.Any() )
                    {
                        requests = requests
                            .Where( r => statusIds.Contains( r.ConnectionStatusId ) );
                    }

                    // Filter by Campus
                    List<int> campusIds = cblCampus.SelectedValuesAsInt;
                    if ( campusIds.Count > 0 )
                    {
                        requests = requests
                            .Where( r =>
                                r.Campus != null &&
                                campusIds.Contains( r.CampusId.Value ) );
                    }

                    // Filter by Last Activity Note
                    List<int> lastActivityIds = cblLastActivity.SelectedValuesAsInt;
                    if ( lastActivityIds.Any() )
                    {
                        requests = requests
                            .Where( r => lastActivityIds.Contains(
                                r.ConnectionRequestActivities.OrderByDescending( a => a.CreatedDateTime ).Select( a => a.ConnectionActivityTypeId ).FirstOrDefault() ) );
                    }

                    SortProperty sortProperty = gRequests.SortProperty;
                    if ( sortProperty != null )
                    {
                        requests = requests.Sort( sortProperty );
                    }
                    else
                    {
                        requests = requests
                            .OrderBy( r => r.PersonAlias.Person.LastName )
                            .ThenBy( r => r.PersonAlias.Person.NickName );
                    }

                    var requestList = requests.ToList();
                    var roleIds = requestList.Where( r => r.AssignedGroupMemberRoleId.HasValue).Select( r => r.AssignedGroupMemberRoleId.Value ).ToList();

                    var roles = new GroupTypeRoleService( rockContext )
                        .Queryable().AsNoTracking()
                        .Where( r => roleIds.Contains( r.Id ) )
                        .ToDictionary( k => k.Id, v => v.Name );

                    gRequests.DataSource = requests.ToList()
                    .Select( r => new
                    {
                        r.Id,
                        r.Guid,
                        PersonId = r.PersonAlias.PersonId,
                        Name = r.PersonAlias.Person.FullNameReversed,
                        Campus = r.Campus,
                        Group = r.AssignedGroup != null ? r.AssignedGroup.Name : "",
                        GroupStatus = r.AssignedGroupMemberStatus != null ? r.AssignedGroupMemberStatus.ConvertToString() : "",
                        GroupRole = r.AssignedGroupMemberRoleId.HasValue ? roles[r.AssignedGroupMemberRoleId.Value] : "",
                        Connector = r.ConnectorPersonAlias != null ? r.ConnectorPersonAlias.Person.FullName : "",
                        LastActivity = FormatActivity( r.ConnectionRequestActivities.OrderByDescending( a => a.CreatedDateTime ).FirstOrDefault() ),
                        LastActivityNote = gRequests.Columns[6].Visible ? r.ConnectionRequestActivities.OrderByDescending(
                            a => a.CreatedDateTime ).Select( a => a.Note ).FirstOrDefault() : "",
                        Status = r.ConnectionStatus.Name,
                        StatusLabel = r.ConnectionStatus.IsCritical ? "warning" : "info",
                        ConnectionState = r.ConnectionState,
                        StateLabel = FormatStateLabel( r.ConnectionState, r.FollowupDate )
                    } )
                   .ToList();
                    gRequests.DataBind();

                    lOpportunityIcon.Text = string.Format( "<i class='{0}'></i>", opportunitySummary.IconCssClass );
                    lConnectionRequest.Text = String.Format( "{0} Connection Requests", opportunitySummary.Name );
                }
            }
            else
            {
                pnlGrid.Visible = false;
            }
        }
コード例 #4
0
        private void BindGrids()
        {
            BindFilters();
            var viewableOppIds = viewableConnectionOpportunities.Select(x => x.Id).ToList();

            var requests = new ConnectionRequestService(_rockContext).Queryable()
                           .Where(r => r.ConnectionRequestActivities.Any(a => a.CreatedDateTime > dateRange.LowerValue && a.CreatedDateTime < dateRange.UpperValue))
                           .Where(r => viewableOppIds.Contains(r.ConnectionOpportunityId));

            var conOppId = rddConnectionOpportunity.SelectedValueAsId();

            if (conOppId > 0)
            {
                requests = requests.Where(r => r.ConnectionOpportunityId == conOppId);
            }

            var campId = campusPicker.SelectedValueAsId();

            if (campId > 0)
            {
                requests = requests.Where(r => r.CampusId == campId);
            }

            var connectorId = ppAssignedPerson.PersonId;

            if (connectorId > 0)
            {
                requests = requests.Where(r => r.ConnectorPersonAlias != null && r.ConnectorPersonAlias.PersonId == connectorId);
            }

            // Filter by State
            var  midnightToday  = RockDateTime.Today.AddDays(1);
            var  states         = new List <ConnectionState>();
            bool futureFollowup = false;

            foreach (string stateValue in cblState.SelectedValues)
            {
                futureFollowup = futureFollowup || stateValue.AsInteger() == -2;
                var state = stateValue.ConvertToEnumOrNull <ConnectionState>();
                if (state.HasValue)
                {
                    states.Add(state.Value);
                }
            }
            if (futureFollowup || states.Any())
            {
                requests = requests
                           .Where(r =>
                                  (futureFollowup && r.ConnectionState == ConnectionState.FutureFollowUp &&
                                   r.FollowupDate.HasValue && r.FollowupDate.Value < midnightToday) ||
                                  states.Contains(r.ConnectionState));
            }


            // Filter by Status
            List <string> statusIds = cblStatus.SelectedValues;

            if (statusIds.Any())
            {
                requests = requests
                           .Where(r => statusIds.Contains(r.ConnectionStatus.Name));
            }


            SortProperty sortProperty = workflowReportTable.SortProperty;

            if (sortProperty != null)
            {
                requests = requests.Sort(sortProperty);
            }
            else
            {
                requests = requests
                           .OrderBy(r => (r.ConnectionState != ConnectionState.Inactive && r.ConnectionState != ConnectionState.Connected) ? 0 : 1)
                           .ThenBy(r => r.ConnectorPersonAlias.Person.NickName)
                           .ThenBy(r => r.ConnectorPersonAlias.Person.LastName)
                           .ThenBy(r => r.ConnectionOpportunity.Name);
            }


            var requestsData = requests.ToList()
                               .Select(r => new
            {
                r.Id,
                r.Guid,
                PersonId        = r.PersonAlias.PersonId,
                Name            = r.PersonAlias.Person.FullName,
                Campus          = r.Campus,
                Group           = r.AssignedGroup != null ? r.AssignedGroup.Name : "",
                Connector       = r.ConnectorPersonAlias != null ? r.ConnectorPersonAlias.Person.FullName : "",
                LastActivity    = FormatActivity(r.ConnectionRequestActivities.OrderByDescending(a => a.CreatedDateTime).FirstOrDefault()),
                CreatedDateTime = r.ConnectionRequestActivities.OrderByDescending(a => a.CreatedDateTime).FirstOrDefault().CreatedDateTime,
                Opened          = (r.CreatedDateTime.HasValue ? (r.CreatedDateTime.Value.ToShortDateString() + " " + r.CreatedDateTime.Value.ToShortTimeString() + " ") : "") + "(<span class='small'>" + r.CreatedDateTime.ToRelativeDateString() + "</small>)",
                Status          = r.ConnectionStatus.Name,
                StatusLabel     = r.ConnectionStatus.IsCritical ? "warning" : "info",
                ConnectionState = r.ConnectionState,
                StateLabel      = FormatStateLabel(r.ConnectionState, r.FollowupDate),
                Opportunity     = r.ConnectionOpportunity,
                Completed       = r.ConnectionState != ConnectionState.Inactive && r.ConnectionState != ConnectionState.Connected ? 0 : 1,
                AgeInt          = (DateTime.Now - r.CreatedDateTime).Value.Days
            })
                               .ToList();

            /*
             *
             * DateTime oneMonthAgo = DateTime.Now.AddMonths( -1 );
             * DateTime twoMonthsAgo = DateTime.Now.AddMonths( -2 );
             * DateTime threeMonthsAgo = DateTime.Now.AddMonths( -3 );
             * IEnumerable<GroupedData> groupedRequestsData = null;
             *
             * switch ( rddlGroupBy.SelectedValue )
             * {
             *  case "1":
             *      workflowReportTable.Visible = false;
             *      workflowGroupedReportTable.Visible = true;
             *      workflowGroupedReportTableItemName = "Workflow";
             *
             *      groupedRequestsData = requestsData.GroupBy( x => x.Opportunity.Id ).Select( grp => new GroupedData
             *      {
             *          GroupedItem = grp.FirstOrDefault().Opportunity.Name,
             *          Count = grp.Count(),
             *          OneMonthOldStats = "Open: " + grp.Where( x => x.Status != "Inactive" && ( x.CreatedDateTime ?? DateTime.Now ) > oneMonthAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt < 30 ).Count(),
             *          TwoMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < oneMonthAgo && ( x.CreatedDateTime ?? DateTime.Now ) > twoMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 30 && x.AgeInt < 60 ).Count(),
             *          ThreeMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < twoMonthsAgo && ( x.CreatedDateTime ?? DateTime.Now ) > threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 60 && x.AgeInt < 90 ).Count(),
             *          OlderThanThreeMonthsStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 90 ).Count(),
             *          TotalStats = "Open: " + grp.Where( x => x.Completed == 0 ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 ).Count()
             *      } ).OrderBy( x => x.GroupedItem );
             *
             *      workflowGroupedReportTable.DataSource = groupedRequestsData.ToList();
             *      workflowGroupedReportTable.DataBind();
             *      break;
             *  case "2":
             *      workflowReportTable.Visible = false;
             *      workflowGroupedReportTable.Visible = true;
             *      workflowGroupedReportTableItemName = "Campus";
             *
             *      groupedRequestsData = requestsData.GroupBy( x => x.Campus.Id ).Select( grp => new GroupedData
             *      {
             *          GroupedItem = grp.FirstOrDefault().Campus.Name,
             *          Count = grp.Count(),
             *          OneMonthOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) > oneMonthAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt < 30 ).Count(),
             *          TwoMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < oneMonthAgo && ( x.CreatedDateTime ?? DateTime.Now ) > twoMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 30 && x.AgeInt < 60 ).Count(),
             *          ThreeMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < twoMonthsAgo && ( x.CreatedDateTime ?? DateTime.Now ) > threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 60 && x.AgeInt < 90 ).Count(),
             *          OlderThanThreeMonthsStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 90 ).Count(),
             *          TotalStats = "Open: " + grp.Where( x => x.Completed == 0 ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 ).Count()
             *      } ).OrderBy( x => x.GroupedItem );
             *
             *      workflowGroupedReportTable.DataSource = groupedRequestsData.ToList();
             *      workflowGroupedReportTable.DataBind();
             *      break;
             *  case "3":
             *      workflowReportTable.Visible = false;
             *      workflowGroupedReportTable.Visible = true;
             *      workflowGroupedReportTableItemName = "Assigned Worker";
             *
             *      groupedRequestsData = requestsData.GroupBy( x => x.AssignedEntityName ).Select( grp => new GroupedData
             *      {
             *          GroupedItem = grp.FirstOrDefault().AssignedEntityName,
             *          Count = grp.Count(),
             *          OneMonthOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) > oneMonthAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt < 30 ).Count(),
             *          TwoMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < oneMonthAgo && ( x.CreatedDateTime ?? DateTime.Now ) > twoMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 30 && x.AgeInt < 60 ).Count(),
             *          ThreeMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < twoMonthsAgo && ( x.CreatedDateTime ?? DateTime.Now ) > threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 60 && x.AgeInt < 90 ).Count(),
             *          OlderThanThreeMonthsStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 90 ).Count(),
             *          TotalStats = "Open: " + grp.Where( x => x.Completed == 0 ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 ).Count()
             *      } ).OrderBy( x => x.GroupedItem );
             *
             *      workflowGroupedReportTable.DataSource = groupedRequestsData.ToList();
             *      workflowGroupedReportTable.DataBind();
             *      break;
             *  case "4":
             *      workflowReportTable.Visible = false;
             *      workflowGroupedReportTable.Visible = true;
             *      workflowGroupedReportTableItemName = "Status";
             *
             *      groupedRequestsData = requestsData.GroupBy( x => x.Status ).Select( grp => new GroupedData
             *      {
             *          GroupedItem = grp.FirstOrDefault().Status,
             *          Count = grp.Count(),
             *          OneMonthOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) > oneMonthAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt < 30 ).Count(),
             *          TwoMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < oneMonthAgo && ( x.CreatedDateTime ?? DateTime.Now ) > twoMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 30 && x.AgeInt < 60 ).Count(),
             *          ThreeMonthsOldStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < twoMonthsAgo && ( x.CreatedDateTime ?? DateTime.Now ) > threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 60 && x.AgeInt < 90 ).Count(),
             *          OlderThanThreeMonthsStats = "Open: " + grp.Where( x => x.Completed == 0 && ( x.CreatedDateTime ?? DateTime.Now ) < threeMonthsAgo ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 && x.AgeInt >= 90 ).Count(),
             *          TotalStats = "Open: " + grp.Where( x => x.Completed == 0 ).Count() + "<br/>Closed: " + grp.Where( x => x.Completed == 1 ).Count()
             *      } ).OrderBy( x => x.GroupedItem );
             *
             *      workflowGroupedReportTable.DataSource = groupedRequestsData.ToList();
             *      workflowGroupedReportTable.DataBind();
             *      break;
             *  default:*/
            workflowReportTable.Visible        = true;
            workflowGroupedReportTable.Visible = false;

            workflowReportTable.DataSource   = requestsData;
            workflowReportTable.DataKeyNames = new string[] { "Id" };
            workflowReportTable.DataBind();

            /*
             * break;
             * }
             */


            //IQueryable<int> tmp = workflowData.AsQueryable().Where(x => x.Completed == 1).Select(x => ((x.CompletedDateTime - x.CreatedDateTime) ?? TimeSpan.Zero).Days);
            //int _0to90_AverageTime = tmp.Count() == 0 ? -1 : (int)tmp.Average();
            //rlWorkflowStats.Text = "Average time to completion is " + _0to90_AverageTime + " days.";

            System.Web.Script.Serialization.JavaScriptSerializer jsSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();

            List <object[]> campusCount = requestsData.GroupBy(wd => wd.Campus.Id).Select(wd => new object[] { wd.FirstOrDefault().Campus.Name, wd.Count() }).ToList();

            campusCount.Insert(0, new string[] { "Campus", "Count" });
            workflowChartData2 = jsSerializer.Serialize(campusCount).EncodeHtml();

            List <object[]> wfTypeCount = requestsData.GroupBy(wd => wd.Opportunity.Id).Select(wd => new object[] { wd.FirstOrDefault().Opportunity.Name, wd.Count() }).ToList();

            wfTypeCount.Insert(0, new string[] { "Workflow Type", "Count" });
            workflowChartData3 = jsSerializer.Serialize(wfTypeCount).EncodeHtml();

            List <object[]> statusCount = requestsData.GroupBy(wd => wd.Status).Select(wd => new object[] { wd.FirstOrDefault().Status, wd.Count() }).ToList();

            statusCount.Insert(0, new string[] { "Status", "Count" });
            workflowChartData4 = jsSerializer.Serialize(statusCount).EncodeHtml();

            List <object[]> workerCount = requestsData.GroupBy(wd => wd.Connector).Select(wd => new object[] { wd.FirstOrDefault().Connector, wd.Count() }).ToList();

            workerCount.Insert(0, new string[] { "Worker", "Count" });
            workflowChartData5 = jsSerializer.Serialize(workerCount).EncodeHtml();

            List <String> statuses = requestsData.GroupBy(wd => wd.Status).Select(x => x.FirstOrDefault().Status).ToList();

            List <object[]> ageList = requestsData.Select(wd => statuses.Select(x => x == wd.Status ? ( object )wd.AgeInt : null).ToArray()).ToList();

            ageList.Insert(0, statuses.ToArray());
            workflowChartData1 = jsSerializer.Serialize(ageList).EncodeHtml();
        }