public UserDelegationViewModel(Guid id, string groupUrl)
        {
            var group = GroupService.GetGroupByLabelOrId(groupUrl);
            if(group == null)
                throw new BusinessLogicException("Не найдена данная группа");

            var expertGroupMember = DataService.PerThread.GroupMemberSet.SingleOrDefault(x => x.UserId == id && x.GroupId == group.Id);
            if(expertGroupMember == null)
                throw new BusinessLogicException("Данный человек не состоит в данной группе");

            var expert = DataService.PerThread.ExpertSet.SingleOrDefault(x => x.GroupMember.Id == expertGroupMember.Id);
            if (expert == null)
                throw new BusinessLogicException("Данный человек не явлется экспертом в этой группе");

            //expertId = expert.Id;
            Expert = new UserExpertDelegate_ExpertViewModel(expert);

            GroupUrl = expert.GroupMember.Group.Url;
            GroupName = expert.GroupMember.Group.Name;
            GroupLogo = ImageService.GetImageUrl<Group>(expert.GroupMember.Group.Logo);
            var groupId = expert.GroupMember.GroupId;
            GroupMemberCount = DataService.PerThread.GroupMemberSet.Count(x => x.GroupId == groupId);

            GroupMember userInGroup = null;
            if(UserContext.Current != null)
            {
                var userId = UserContext.Current.Id;
                userInGroup =
                    DataService.PerThread.GroupMemberSet.SingleOrDefault(x => x.UserId == userId && x.GroupId == groupId);
            }

            if (userInGroup != null)
                UserIsApprovedMember = (userInGroup.State == (byte)GroupMemberState.Approved || userInGroup.State == (byte)GroupMemberState.Moderator);

            foreach (var t in expert.Tags.Where(x => x.TopicState == (byte)TopicState.GroupTopic))
            {
                var tag = new TagViewModel(t);

                if(userInGroup == null)
                    AnonymouseTags.Add(tag);
                else if (expert.ExpertVotes.Any(x => x.ExpertId == expert.Id && x.GroupMemberId == userInGroup.Id && x.TagId == t.Id))
                    CheckedTags.Add(tag);
                else if (userInGroup.Expert == null)
                    NotCheckedTags.Add(tag);
                else
                {
                    var tt = DataService.PerThread.TagSet.Single(x => x.Id == t.Id);

                    if (!userInGroup.Expert.Tags.Contains(tt))
                        NotCheckedTags.Add(tag);
                    else
                        DisabledTags.Add(tag);
                }

                var votersCount = DataService.PerThread.ExpertVoteSet.Count(x => x.TagId == tag.Id && x.ExpertId == Expert.Id);
                VotersCountForTag.Add(tag.Id, votersCount);
            }
        }
        public UserDelegationViewModel(Guid id, string groupUrl)
        {
            var group = GroupService.GetGroupByLabelOrId(groupUrl);

            if (group == null)
            {
                throw new BusinessLogicException("Не найдена данная группа");
            }

            var expertGroupMember = DataService.PerThread.GroupMemberSet.SingleOrDefault(x => x.UserId == id && x.GroupId == group.Id);

            if (expertGroupMember == null)
            {
                throw new BusinessLogicException("Данный человек не состоит в данной группе");
            }

            var expert = DataService.PerThread.ExpertSet.SingleOrDefault(x => x.GroupMember.Id == expertGroupMember.Id);

            if (expert == null)
            {
                throw new BusinessLogicException("Данный человек не явлется экспертом в этой группе");
            }

            //expertId = expert.Id;
            Expert = new UserExpertDelegate_ExpertViewModel(expert);

            GroupUrl  = expert.GroupMember.Group.Url;
            GroupName = expert.GroupMember.Group.Name;
            GroupLogo = ImageService.GetImageUrl <Group>(expert.GroupMember.Group.Logo);
            var groupId = expert.GroupMember.GroupId;

            GroupMemberCount = DataService.PerThread.GroupMemberSet.Count(x => x.GroupId == groupId);

            GroupMember userInGroup = null;

            if (UserContext.Current != null)
            {
                var userId = UserContext.Current.Id;
                userInGroup =
                    DataService.PerThread.GroupMemberSet.SingleOrDefault(x => x.UserId == userId && x.GroupId == groupId);
            }

            if (userInGroup != null)
            {
                UserIsApprovedMember = (userInGroup.State == (byte)GroupMemberState.Approved || userInGroup.State == (byte)GroupMemberState.Moderator);
            }

            foreach (var t in expert.Tags.Where(x => x.TopicState == (byte)TopicState.GroupTopic))
            {
                var tag = new TagViewModel(t);

                if (userInGroup == null)
                {
                    AnonymouseTags.Add(tag);
                }
                else if (expert.ExpertVotes.Any(x => x.ExpertId == expert.Id && x.GroupMemberId == userInGroup.Id && x.TagId == t.Id))
                {
                    CheckedTags.Add(tag);
                }
                else if (userInGroup.Expert == null)
                {
                    NotCheckedTags.Add(tag);
                }
                else
                {
                    var tt = DataService.PerThread.TagSet.Single(x => x.Id == t.Id);

                    if (!userInGroup.Expert.Tags.Contains(tt))
                    {
                        NotCheckedTags.Add(tag);
                    }
                    else
                    {
                        DisabledTags.Add(tag);
                    }
                }

                var votersCount = DataService.PerThread.ExpertVoteSet.Count(x => x.TagId == tag.Id && x.ExpertId == Expert.Id);
                VotersCountForTag.Add(tag.Id, votersCount);
            }
        }
 public UserDelegationViewModel()
 {
     Expert = new UserExpertDelegate_ExpertViewModel();
 }
 public UserDelegationViewModel()
 {
     Expert = new UserExpertDelegate_ExpertViewModel();
 }