public void SendToGroup(Group group, MessageStruct messageInfo, GroupMessageRecipientType recipientType) { var recipientIdList = new List <Guid>(); if (recipientType.HasFlag(GroupMessageRecipientType.Members)) { recipientIdList.AddRange(DataService.PerThread.GroupMemberSet.Where( x => x.GroupId == group.Id && x.State == (byte)GroupMemberState.Approved).Select(uig => uig.UserId) .ToList()); } if (recipientType.HasFlag(GroupMessageRecipientType.Moderators)) { recipientIdList.AddRange(DataService.PerThread.GroupMemberSet.Where( x => x.GroupId == group.Id && x.State == (byte)GroupMemberState.Moderator).Select(uig => uig.UserId) .ToList()); } if (recipientType.HasFlag(GroupMessageRecipientType.NotApprovedUsers)) { recipientIdList.AddRange(DataService.PerThread.GroupMemberSet.Where( x => x.GroupId == group.Id && x.State == (byte)GroupMemberState.NotApproved).Select(uig => uig.UserId) .ToList()); } recipientIdList = recipientIdList.Distinct().ToList(); if (recipientIdList.Count > 0) { foreach (var userId in recipientIdList) { var message = new MessageStruct { AuthorId = messageInfo.AuthorId, RecipientId = userId, Text = messageInfo.Text, Type = messageInfo.Type, Date = messageInfo.Date }; Send(message); } DataService.PerThread.SaveChanges(); } UserContextService.GroupMembersAbandon(group.Id); }
public Group UpdateGroup(EditGroupStruct newGroupData, bool saveChanges = true) { //var parentGroup = DataService.PerThread.GroupSet.Where(g => g.Id == groupData.ParentGroupId).SingleOrDefault(); var parentGroup = DataService.PerThread.GroupSet.SingleOrDefault(g => g.Id == ConstHelper.RootGroupId); //TODO: пока нет вложенности, будет так if (parentGroup == null) { throw new BusinessLogicException("В качестве родительской указана не существующая группа"); } if (ExistAnotherGroupWithLabel(newGroupData.Label, newGroupData.GroupId)) { throw new BusinessLogicException("Существует другая группа с указанным label (ЧПУ)"); } var group = DataService.PerThread.GroupSet.SingleOrDefault(g => g.Id == newGroupData.GroupId); if (group == null) { throw new BusinessLogicException("Такой группы не существует"); } if (newGroupData.ElectionFrequency > 12) { throw new BusinessLogicException("Выборы в группе не могут происходить реже чем раз в 12 месяцев"); } if (newGroupData.ElectionFrequency < 1) { throw new BusinessLogicException("Выборы в группе не могут происходить реже чем раз в месяц"); } if (newGroupData.ModeratorsCount < 3) { throw new BusinessLogicException("В группе должно быть не менее 3х модераторов"); } group.Name = newGroupData.Name; group.Label = newGroupData.Label; group.Summary = newGroupData.Summary; group.Categories.Clear(); foreach (var cid in newGroupData.Categories) { var category = DataService.PerThread.GroupCategorySet.SingleOrDefault(x => x.Id == cid); if (category != null) { group.Categories.Add(category); } } //IList<Tag> tagsToDelete = new List<Tag>(); //IList<ExpertVote> evToDelete = new List<ExpertVote>(); //foreach (var tag in group.Tags) // if (!newTagsList.Contains(tag)) // { // tagsToDelete.Add(tag); // foreach (var gm in group.GroupMembers) // if (gm.Expert != null) // gm.Expert.Tags.Remove(tag); // foreach (var ev in DataService.PerThread.ExpertVoteSet.Where(x => x.GroupMember.GroupId == group.Id && x.TagId == tag.Id)) // evToDelete.Add(ev); // } //foreach (var ev in evToDelete) // DataService.PerThread.ExpertVoteSet.DeleteObject(ev); //foreach (var tag in tagsToDelete) // group.Tags.Remove(tag); //foreach (var tag in newTagsList) // if (!group.Tags.Contains(tag)) // group.Tags.Add(tag); group.ModeratorsCount = newGroupData.ModeratorsCount; group.ElectionFrequency = newGroupData.ElectionFrequency; group.ParentGroup = parentGroup; group.PollQuorum = newGroupData.PollQuorum; group.ElectionQuorum = newGroupData.ElectionQuorum; if (saveChanges) { DataService.PerThread.SaveChanges(); } CachService.DropViewModelByModel(group.Id); UserContextService.GroupMembersAbandon(group.Id); return(group); }