/// <summary> /// Binds the grid. /// </summary> private void BindGrid() { var rockContext = new RockContext(); var communications = new CommunicationService( rockContext ) .Queryable( "ChannelEntityType,Sender,Reviewer" ) .Where( c => c.Status != CommunicationStatus.Transient ); string subject = rFilter.GetUserPreference( "Subject" ); if ( !string.IsNullOrWhiteSpace( subject ) ) { communications = communications.Where( c => c.Subject.Contains( subject ) ); } Guid entityTypeGuid = Guid.Empty; if ( Guid.TryParse( rFilter.GetUserPreference( "Channel" ), out entityTypeGuid ) ) { communications = communications.Where( c => c.ChannelEntityType != null && c.ChannelEntityType.Guid.Equals( entityTypeGuid ) ); } string status = rFilter.GetUserPreference( "Status" ); if ( !string.IsNullOrWhiteSpace( status ) ) { var communicationStatus = (CommunicationStatus)System.Enum.Parse( typeof( CommunicationStatus ), status ); communications = communications.Where( c => c.Status == communicationStatus ); } if ( canApprove ) { int personId = 0; if ( int.TryParse( rFilter.GetUserPreference( "Created By" ), out personId ) && personId != 0 ) { communications = communications.Where( c => c.SenderPersonId.HasValue && c.SenderPersonId.Value == personId ); } } else { communications = communications.Where( c => c.SenderPersonId.HasValue && c.SenderPersonId.Value == CurrentPersonId ); } string content = rFilter.GetUserPreference( "Content" ); if ( !string.IsNullOrWhiteSpace( content ) ) { communications = communications.Where( c => c.ChannelDataJson.Contains( content ) ); } var drp = new DateRangePicker(); drp.DelimitedValues = rFilter.GetUserPreference( "Date Range" ); if ( drp.LowerValue.HasValue ) { communications = communications.Where( a => a.ReviewedDateTime >= drp.LowerValue.Value ); } if ( drp.UpperValue.HasValue ) { DateTime upperDate = drp.UpperValue.Value.Date.AddDays( 1 ); communications = communications.Where( a => a.ReviewedDateTime < upperDate ); } var recipients = new CommunicationRecipientService( rockContext ).Queryable(); var queryable = communications .Select( c => new CommunicationItem { Id = c.Id, Communication = c, Recipients = recipients .Where( r => r.CommunicationId == c.Id) .Count(), PendingRecipients = recipients .Where( r => r.CommunicationId == c.Id && r.Status == CommunicationRecipientStatus.Pending) .Count(), CancelledRecipients = recipients .Where( r => r.CommunicationId == c.Id && r.Status == CommunicationRecipientStatus.Cancelled) .Count(), FailedRecipients = recipients .Where( r => r.CommunicationId == c.Id && r.Status == CommunicationRecipientStatus.Failed) .Count(), DeliveredRecipients = recipients .Where( r => r.CommunicationId == c.Id && (r.Status == CommunicationRecipientStatus.Delivered || r.Status == CommunicationRecipientStatus.Opened)) .Count(), OpenedRecipients = recipients .Where( r => r.CommunicationId == c.Id && r.Status == CommunicationRecipientStatus.Opened) .Count() } ); var sortProperty = gCommunication.SortProperty; if ( sortProperty != null ) { queryable = queryable.Sort( sortProperty ); } else { queryable = queryable.OrderByDescending( c => c.Communication.Id ); } // Get the channel names var channels = new Dictionary<int, string>(); foreach ( var item in Rock.Communication.ChannelContainer.Instance.Components.Values ) { var entityType = item.Value.EntityType; channels.Add( entityType.Id, item.Metadata.ComponentName ); } var communicationItems = queryable.ToList(); foreach( var c in communicationItems) { c.ChannelName = channels.ContainsKey( c.Communication.ChannelEntityTypeId ?? 0 ) ? channels[c.Communication.ChannelEntityTypeId ?? 0] : c.Communication.ChannelEntityType.FriendlyName; } gCommunication.DataSource = communicationItems; gCommunication.DataBind(); }
/// <summary> /// Binds the grid. /// </summary> private void BindGrid() { var rockContext = new RockContext(); var communications = new CommunicationService( rockContext ) .Queryable().AsNoTracking() .Where( c => c.Status != CommunicationStatus.Transient ); string subject = tbSubject.Text; if ( !string.IsNullOrWhiteSpace( subject ) ) { communications = communications.Where( c => c.Subject.Contains( subject ) ); } Guid? entityTypeGuid = cpMedium.SelectedValue.AsGuidOrNull(); if ( entityTypeGuid.HasValue ) { communications = communications.Where( c => c.MediumEntityType != null && c.MediumEntityType.Guid.Equals( entityTypeGuid.Value ) ); } string status = ddlStatus.SelectedValue; if ( !string.IsNullOrWhiteSpace( status ) ) { var communicationStatus = (CommunicationStatus)System.Enum.Parse( typeof( CommunicationStatus ), status ); communications = communications.Where( c => c.Status == communicationStatus ); } if ( canApprove ) { if ( ppSender.PersonId.HasValue ) { communications = communications .Where( c => c.SenderPersonAlias != null && c.SenderPersonAlias.PersonId == ppSender.PersonId.Value ); } } else { // If can't approve, only show current person's communications communications = communications .Where( c => c.SenderPersonAlias != null && c.SenderPersonAlias.PersonId == CurrentPersonId ); } if ( drpDates.LowerValue.HasValue ) { communications = communications.Where( a => a.CreatedDateTime >= drpDates.LowerValue.Value ); } if ( drpDates.UpperValue.HasValue ) { DateTime upperDate = drpDates.UpperValue.Value.Date.AddDays( 1 ); communications = communications.Where( a => a.CreatedDateTime < upperDate ); } string content = tbContent.Text; if ( !string.IsNullOrWhiteSpace( content ) ) { communications = communications.Where( c => c.MediumDataJson.Contains( content ) ); } var recipients = new CommunicationRecipientService( rockContext ).Queryable(); var queryable = communications .Select( c => new CommunicationItem { Id = c.Id, MediumEntityTypeId = c.MediumEntityTypeId, MediumName = c.MediumEntityTypeId.HasValue ? c.MediumEntityType.FriendlyName : null, Subject = c.Subject, CreatedDateTime = c.CreatedDateTime, Sender = c.SenderPersonAlias != null ? c.SenderPersonAlias.Person : null, ReviewedDateTime = c.ReviewedDateTime, Reviewer = c.ReviewerPersonAlias != null ? c.ReviewerPersonAlias.Person : null, Status = c.Status, Recipients = recipients.Where( r => r.CommunicationId == c.Id ).Count(), PendingRecipients = recipients.Where( r => r.CommunicationId == c.Id && r.Status == CommunicationRecipientStatus.Pending ).Count(), CancelledRecipients = recipients.Where( r => r.CommunicationId == c.Id && r.Status == CommunicationRecipientStatus.Cancelled ).Count(), FailedRecipients = recipients.Where( r => r.CommunicationId == c.Id && r.Status == CommunicationRecipientStatus.Failed ).Count(), DeliveredRecipients = recipients.Where( r => r.CommunicationId == c.Id && ( r.Status == CommunicationRecipientStatus.Delivered || r.Status == CommunicationRecipientStatus.Opened ) ).Count(), OpenedRecipients = recipients.Where( r => r.CommunicationId == c.Id && r.Status == CommunicationRecipientStatus.Opened ).Count() }); var sortProperty = gCommunication.SortProperty; if ( sortProperty != null ) { queryable = queryable.Sort( sortProperty ); } else { queryable = queryable.OrderByDescending( c => c.CreatedDateTime ); } gCommunication.EntityTypeId = EntityTypeCache.Read<Rock.Model.Communication>().Id; gCommunication.SetLinqDataSource( queryable ); gCommunication.DataBind(); }