private void BindGrid() { using ( new UnitOfWorkScope() ) { var communications = new CommunicationService() .Queryable() .Where( c => c.Status != CommunicationStatus.Transient ); string subject = rFilter.GetUserPreference( "Subject" ); if ( !string.IsNullOrWhiteSpace( subject ) ) { communications = communications.Where( c => c.Subject.StartsWith( 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 recipients = new CommunicationRecipientService().Queryable(); var sortProperty = gCommunication.SortProperty; var queryable = communications .Join( recipients, c => c.Id, r => r.CommunicationId, ( c, r ) => new { c, r } ) .GroupBy( cr => cr.c ) .Select( g => new CommunicationItem { Id = g.Key.Id, Communication = g.Key, Recipients = g.Count(), PendingRecipients = g.Count( s => s.r.Status == CommunicationRecipientStatus.Pending ), SuccessRecipients = g.Count( s => s.r.Status == CommunicationRecipientStatus.Success ), FailedRecipients = g.Count( s => s.r.Status == CommunicationRecipientStatus.Failed ), CancelledRecipients = g.Count( s => s.r.Status == CommunicationRecipientStatus.Cancelled ) } ); if ( sortProperty != null ) { queryable = queryable.Sort( sortProperty ); } else { queryable = queryable.OrderByDescending( c => c.Communication.Id ); } gCommunication.DataSource = queryable.ToList(); gCommunication.DataBind(); } }
/// <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() { // If configured for a person and person is null, return int personEntityTypeId = EntityTypeCache.Read<Person>().Id; if ( ContextTypesRequired.Any( e => e.Id == personEntityTypeId ) && _person == null ) { return; } var rockContext = new RockContext(); var qryCommunications = new CommunicationService( rockContext ).Queryable().Where( c => c.Status != CommunicationStatus.Transient ); string subject = tbSubject.Text; if ( !string.IsNullOrWhiteSpace( subject ) ) { qryCommunications = qryCommunications.Where( c => c.Subject.Contains( subject ) ); } Guid? entityTypeGuid = cpMedium.SelectedValue.AsGuidOrNull(); if ( entityTypeGuid.HasValue ) { qryCommunications = qryCommunications.Where( c => c.MediumEntityType != null && c.MediumEntityType.Guid.Equals( entityTypeGuid.Value ) ); } var communicationStatus = ddlStatus.SelectedValue.ConvertToEnumOrNull<CommunicationStatus>(); if ( communicationStatus.HasValue ) { qryCommunications = qryCommunications.Where( c => c.Status == communicationStatus.Value ); } // only communications for the selected recipient (_person) if ( _person != null ) { qryCommunications = qryCommunications .Where( c => c.Recipients.Any( a => a.PersonAlias.PersonId == _person.Id && a.Status == CommunicationRecipientStatus.Delivered ) ); } if ( drpDates.LowerValue.HasValue ) { qryCommunications = qryCommunications.Where( a => a.CreatedDateTime >= drpDates.LowerValue.Value ); } if ( drpDates.UpperValue.HasValue ) { DateTime upperDate = drpDates.UpperValue.Value.Date.AddDays( 1 ); qryCommunications = qryCommunications.Where( a => a.CreatedDateTime < upperDate ); } string content = tbContent.Text; if ( !string.IsNullOrWhiteSpace( content ) ) { qryCommunications = qryCommunications.Where( c => c.MediumDataJson.Contains( content ) ); } var sortProperty = gCommunication.SortProperty; if ( sortProperty != null ) { qryCommunications = qryCommunications.Sort( sortProperty ); } else { qryCommunications = qryCommunications.OrderByDescending( c => c.CreatedDateTime ); } gCommunication.EntityTypeId = EntityTypeCache.Read<Rock.Model.Communication>().Id; gCommunication.SetLinqDataSource( qryCommunications.Include(a => a.MediumEntityType).AsNoTracking() ); 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(); }