/// <summary> /// Gets the metric values. /// </summary> /// <param name="isPrimary">if set to <c>true</c> [is primary].</param> /// <returns></returns> protected List<MetricValue> GetMetricValues( bool isPrimary ) { var rockContext = new RockContext(); var metricService = new MetricService( rockContext ); List<Guid> sourceGuids = null; var preKey = isPrimary ? string.Empty : "Comparison"; IQueryable<MetricValue> metricValues = null; var attributeValue = GetAttributeValue( preKey + "MetricSource" ); if ( string.IsNullOrWhiteSpace( attributeValue ) ) { attributeValue = string.Empty; } var pairs = MetricCategoriesFieldAttribute.GetValueAsGuidPairs( attributeValue ); sourceGuids = pairs.Select( p => p.MetricGuid ).ToList(); if ( sourceGuids.Any() ) { metricValues = metricService.GetByGuids( sourceGuids ).SelectMany( m => m.MetricValues ); } else { nbMetricWarning.Visible = true; pnlMetricDisplay.Visible = false; return null; } if ( GetAttributeValue( preKey + "RespectCampusContext" ).AsBoolean() ) { var campusContext = RockPage.GetCurrentContext( EntityTypeCache.Read( typeof( Campus ) ) ); if ( campusContext != null ) { metricValues = FilterMetricValuesByPartition( metricValues, "Campus", campusContext.Id ); } } if ( GetAttributeValue( preKey + "RespectGroupContext" ).AsBoolean() ) { var groupTypeContext = RockPage.GetCurrentContext( EntityTypeCache.Read( typeof( GroupType ) ) ); var groupContext = RockPage.GetCurrentContext( EntityTypeCache.Read( typeof( Group ) ) ); if ( groupContext != null ) { metricValues = FilterMetricValuesByPartition( metricValues, "Group", groupContext.Id ); } else if ( groupTypeContext != null ) { var groupTypeIds = new GroupTypeService( rockContext ).GetAllAssociatedDescendents( groupTypeContext.Id ).Select( gt => gt.Id ); var groupIds = new GroupService( rockContext ).Queryable().Where( g => groupTypeIds.Contains( g.GroupTypeId ) ).Select( g => g.Id ); metricValues = metricValues.Where( a => a.MetricValuePartitions.Any( mvp => mvp.MetricPartition.Label == "Group" && groupIds.Any( i => i == mvp.EntityId ) ) ); } } if ( GetAttributeValue( preKey + "RespectDateContext" ).AsBoolean() ) { var dateRangeString = RockPage.GetUserPreference( ContextPreferenceName ); if ( !string.IsNullOrWhiteSpace( dateRangeString ) ) { var dateRange = SlidingDateRangePicker.CalculateDateRangeFromDelimitedValues( dateRangeString ); metricValues = metricValues.Where( v => v.MetricValueDateTime >= dateRange.Start && v.MetricValueDateTime <= dateRange.End ); } } if ( GetAttributeValue( preKey + "RespectScheduleContext" ).AsBoolean() ) { var scheduleContext = RockPage.GetCurrentContext( EntityTypeCache.Read( typeof( Schedule ) ) ); if ( scheduleContext != null ) { metricValues = FilterMetricValuesByPartition( metricValues, "Schedule", scheduleContext.Id ); } } return metricValues.ToList(); }
/// <summary> /// Shows the readonly details. /// </summary> /// <param name="groupType">The groupType.</param> private void ShowReadonlyDetails( GroupType groupType ) { SetEditMode( false ); if ( groupType != null ) { hfGroupTypeId.SetValue( groupType.Id ); lReadOnlyTitle.Text = groupType.ToString().FormatAsHtmlTitle(); lDescription.Text = groupType.Description; groupType.LoadAttributes(); hlType.Text = groupType.GetAttributeValue( "CheckInType" ); hlType.Visible = true; DescriptionList mainDetailsDescList = new DescriptionList(); DescriptionList leftDetailsDescList = new DescriptionList(); DescriptionList rightDetailsDescList = new DescriptionList(); string scheduleList = string.Empty; using ( var rockContext = new RockContext() ) { var descendantGroupTypeIds = new GroupTypeService( rockContext ).GetAllAssociatedDescendents( groupType.Id ).Select( a => a.Id ); scheduleList = new GroupLocationService( rockContext ) .Queryable().AsNoTracking() .Where( a => a.Group.GroupType.Id == groupType.Id || descendantGroupTypeIds.Contains( a.Group.GroupTypeId ) ) .SelectMany( a => a.Schedules ) .Select( s => s.Name ) .Distinct() .OrderBy( s => s ) .ToList() .AsDelimited( ", " ); } if ( !string.IsNullOrWhiteSpace( scheduleList ) ) { mainDetailsDescList.Add( "Scheduled Times", scheduleList ); } groupType.LoadAttributes(); if ( groupType.AttributeValues.ContainsKey( "core_checkin_CheckInType" ) ) { leftDetailsDescList.Add( "Check-in Type", groupType.AttributeValues["core_checkin_CheckInType"].ValueFormatted ); } if ( groupType.AttributeValues.ContainsKey( "core_checkin_SecurityCodeLength" ) ) { leftDetailsDescList.Add( "Security Code Length", groupType.AttributeValues["core_checkin_SecurityCodeLength"].ValueFormatted ); } if ( groupType.AttributeValues.ContainsKey( "core_checkin_SearchType" ) ) { rightDetailsDescList.Add( "Search Type", groupType.AttributeValues["core_checkin_SearchType"].ValueFormatted ); } if ( groupType.AttributeValues.ContainsKey( "core_checkin_PhoneSearchType" ) ) { rightDetailsDescList.Add( "Phone Number Compare", groupType.AttributeValues["core_checkin_PhoneSearchType"].ValueFormatted ); } lblMainDetails.Text = mainDetailsDescList.Html; lblLeftDetails.Text = leftDetailsDescList.Html; lblRightDetails.Text = rightDetailsDescList.Html; } }
/// <summary> /// Binds the grid. /// </summary> protected void BindGrid() { AddScheduleColumns(); var rockContext = new RockContext(); var groupLocationService = new GroupLocationService( rockContext ); var groupLocationQry = groupLocationService.Queryable(); int groupTypeId; // if this page has a PageParam for groupTypeId use that to limit which groupTypeId to see. Otherwise, use the groupTypeId specified in the filter int? groupTypeIdPageParam = this.PageParameter( "groupTypeId" ).AsInteger( false ); if ( groupTypeIdPageParam.HasValue ) { groupTypeId = groupTypeIdPageParam ?? Rock.Constants.All.Id; } else { groupTypeId = ddlGroupType.SelectedValueAsInt() ?? Rock.Constants.All.Id; } if ( groupTypeId != Rock.Constants.All.Id ) { var descendantGroupTypeIds = new GroupTypeService( rockContext ).GetAllAssociatedDescendents( groupTypeId ).Select( a => a.Id ); // filter to groups that either are of the GroupType or are of a GroupType that has the selected GroupType as a parent (ancestor) groupLocationQry = groupLocationQry.Where( a => a.Group.GroupType.Id == groupTypeId || descendantGroupTypeIds.Contains( a.Group.GroupTypeId ) ); } if ( gGroupLocationSchedule.SortProperty != null ) { groupLocationQry = groupLocationQry.Sort( gGroupLocationSchedule.SortProperty ); } else { groupLocationQry = groupLocationQry.OrderBy( a => a.Group.Name ).ThenBy( a => a.Location.Name ); } var qryList = groupLocationQry.Select( a => new { GroupLocationId = a.Id, GroupName = a.Group.Name, LocationName = a.Location.Name, ScheduleIdList = a.Schedules.Select( s => s.Id ), a.LocationId } ).ToList(); int parentLocationId = pkrParentLocation.SelectedValueAsInt() ?? Rock.Constants.All.Id; if ( parentLocationId != Rock.Constants.All.Id ) { var descendantLocationIds = new LocationService( rockContext ).GetAllDescendents( parentLocationId ).Select( a => a.Id ); qryList = qryList.Where( a => descendantLocationIds.Contains( a.LocationId ) ).ToList(); } // put stuff in a datatable so we can dynamically have columns for each Schedule DataTable dataTable = new DataTable(); dataTable.Columns.Add( "GroupLocationId" ); dataTable.Columns.Add( "GroupName" ); dataTable.Columns.Add( "LocationName" ); foreach ( var field in gGroupLocationSchedule.Columns.OfType<CheckBoxEditableField>() ) { dataTable.Columns.Add( field.DataField, typeof( bool ) ); } foreach ( var row in qryList ) { DataRow dataRow = dataTable.NewRow(); dataRow["GroupLocationId"] = row.GroupLocationId; dataRow["GroupName"] = row.GroupName; dataRow["LocationName"] = row.LocationName; foreach ( var field in gGroupLocationSchedule.Columns.OfType<CheckBoxEditableField>() ) { int scheduleId = int.Parse( field.DataField.Replace( "scheduleField_", string.Empty ) ); dataRow[field.DataField] = row.ScheduleIdList.Any( a => a == scheduleId ); } dataTable.Rows.Add( dataRow ); } gGroupLocationSchedule.DataSource = dataTable; gGroupLocationSchedule.DataBind(); }