public SearchPackageResult SearchPlayersList([FromUri] SearchPackage searchPackage, [FromUri] SearchPlayersRequest request, [FromUri] Guid?id) { VerifyPermission(Permissions.Send, Modules.MassMessageTool); var dataBuilder = new SearchPackageDataBuilder <Core.Messaging.Interface.Data.Player>( searchPackage, _massMessageQueries.CreateMassMessagePlayerQuery(request)); var recipients = id.HasValue ? _massMessageQueries.GetRecipients(id.Value).Select(x => x.Id).ToArray() : new Guid[] {}; dataBuilder.SetFilterRule(x => x.BrandId, (value) => y => y.BrandId == new Guid(value)) .Map(player => player.Id, player => new object[] { player.Username, player.FirstName, player.LastName, player.Email, player.PhoneNumber, player.PaymentLevelName, player.VipLevelName, Enum.GetName(typeof(Status), player.IsActive ? Status.Active : Status.Inactive), Format.FormatDate(player.DateRegistered, false), recipients.Contains(player.Id) }); return(dataBuilder.GetPageData(player => player.Username)); }
public UpdateRecipientsResponse UpdateRecipients(UpdateRecipientsRequest request) { var validationResult = _massMessageQueries.GetValidationResult(request); if (!validationResult.IsValid) { throw new RegoValidationException(validationResult); } using (var scope = CustomTransactionScope.GetTransactionScope()) { if (!request.Id.HasValue) { DeleteUnsentMassMessages(); } MassMessage massMessage; if (request.Id.HasValue) { massMessage = _messagingRepository.MassMessages .Include(x => x.Recipients.Select(y => y.Language)) .Single(x => x.Id == request.Id); } else { massMessage = new MassMessage { Id = Guid.NewGuid(), AdminId = _actorInfoProvider.Actor.Id }; _messagingRepository.MassMessages.Add(massMessage); } massMessage.IpAddress = request.IpAddress; if (request.UpdateRecipientsType == UpdateRecipientsType.SelectSingle) { massMessage.Recipients.Add(_messagingRepository.Players .Include(x => x.Language) .Single(x => x.Id == request.PlayerId)); } else if (request.UpdateRecipientsType == UpdateRecipientsType.UnselectSingle) { massMessage.Recipients.Remove(massMessage.Recipients.Single(x => x.Id == request.PlayerId)); } else if (request.UpdateRecipientsType == UpdateRecipientsType.RecipientsListUnselectAll) { massMessage.Recipients.Clear(); } else { var playerIds = _massMessageQueries.CreateMassMessagePlayerQuery(request.SearchPlayersRequest) .Select(x => x.Id); if (request.UpdateRecipientsType == UpdateRecipientsType.SearchResultSelectAll) { var players = _messagingRepository.Players .Include(x => x.Language) .Where(x => playerIds.Contains(x.Id)); foreach (var player in players) { massMessage.Recipients.Add(player); } } else { var recipients = massMessage.Recipients.Where(x => playerIds.Contains(x.Id)).ToArray(); foreach (var recipient in recipients) { massMessage.Recipients.Remove(recipient); } } } _messagingRepository.SaveChanges(); scope.Complete(); IEnumerable <Interface.Data.Language> languages = null; if (massMessage.Recipients.Any()) { var languageEntities = massMessage.Recipients.GroupBy(x => x.LanguageCode).Select(x => x.First().Language); languages = Mapper.Map <List <Interface.Data.Language> >(languageEntities); } return(new UpdateRecipientsResponse { Id = massMessage.Id, HasRecipients = massMessage.Recipients.Any(), Languages = languages }); } }