/// <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; } }
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(); }
/// <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; } }
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(); }