public GroupSurveyResultsViewModel(Survey survey)
        {
            if (survey == null)
                return;

            if (survey.GroupId.HasValue)
                GroupId = survey.GroupId.Value;

            Bulletins = survey.Bulletins.Select(x => new GroupSurveyResults_BulletinViewModel(x, survey.HasOpenProtocol)).OrderBy(x => x.Name).ToList();
        }
        public GroupCreateEditSurveyViewModel(Survey survey)
        {
            if (survey != null)
            {
                if (survey.GroupId.HasValue)
                {
                    GroupId = survey.GroupId.Value;
                    GroupName = survey.Group.Name;
                    GroupUrl = survey.Group.Url;
                    IsContentModeration = survey.Group.PrivacyEnum.HasFlag(GroupPrivacy.ContentModeration);
                }

                SurveyId = survey.Id;
                Title = survey.Title;
                Text = survey.Text;
                IsPrivate = survey.IsPrivate;
                IsDraft = survey.State == (byte)ContentState.Draft;
                TagTitles = TagsHelper.ConvertTagListToString(survey.Tags);
                Duration = survey.Duration;
                VariantsCount = survey.VariantsCount;
                Options = survey.Options.Select(x => new GroupSurveyOptionViewModel(x)).OrderBy(x => x.Position).ToList();
            }
        }
Example #3
0
 public static Survey UpdateSurvey(Survey survey, SurveyData data, Guid? userId)
 {
     return _votingService.UpdateSurvey(survey, data, userId);
 }
Example #4
0
        private void FixupSurvey(Survey previousValue)
        {
            if (previousValue != null && previousValue.Options.Contains(this))
            {
                previousValue.Options.Remove(this);
            }

            if (Survey != null)
            {
                if (!Survey.Options.Contains(this))
                {
                    Survey.Options.Add(this);
                }
                if (SurveyId != Survey.Id)
                {
                    SurveyId = Survey.Id;
                }
            }
        }
Example #5
0
        public Survey UpdateSurvey(Survey survey, SurveyData data, Guid? userId)
        {
            if (survey.State != (byte)ContentState.Draft && survey.State != (byte)ContentState.Premoderated)
                throw new BusinessLogicException("Данный опрос нельзя изменять");

            if (userId.HasValue)
            {
                if (survey.AuthorId != userId)
                    throw new BusinessLogicException("Вы не являетесь автором опроса");

                GroupService.UserInGroup(userId.Value, survey.Group, true);
            }

            if (data.VariantsCount >= data.Options.Count)
                throw new BusinessLogicException("Разрешено выбирать слишком много вариантов");

            survey.Title = data.Title;
            survey.Text = data.Text;
            survey.IsPrivate = data.IsPrivate;
            survey.Duration = data.Duration;
            survey.VariantsCount = data.VariantsCount;
            survey.Tags.Clear();

            foreach (var tag in TagsHelper.ConvertStringToTagList(data.Tags, survey.GroupId))
                survey.Tags.Add(tag);

            var optionsForDelete = survey.Options.ToList();
            foreach (var option in optionsForDelete)
                DataService.PerThread.OptionSet.DeleteObject(option);

            var options = new List<Option>();
            byte optPos = 0;
            foreach (var o in data.Options)
            {
                var option = new Option
                {
                    Position = optPos,
                    Title = o.Title,
                    Description = o.Description,
                    SurveyId = survey.Id
                };
                DataService.PerThread.OptionSet.AddObject(option);
                options.Add(option);
                optPos++;
            }

            survey.Options.Clear();
            foreach (var option in options)
                survey.Options.Add(option);

            DataService.PerThread.SaveChanges();

            return survey;
        }
Example #6
0
        public Survey CreateSurvey(SurveyData data, Guid? userId)
        {
            var group = DataService.PerThread.GroupSet.SingleOrDefault(x => x.Id == data.GroupId);
            if (group == null)
                throw new BusinessLogicException("Указан неверный идентификатор группы");

            if (userId.HasValue)
                GroupService.UserInGroup(userId.Value, group, true);

            if (data.VariantsCount >= data.Options.Count)
                throw new BusinessLogicException("Разрешено выбирать слишком много вариантов");

            var survey = new Survey
            {
                AuthorId = userId,
                Title = data.Title,
                Text = data.Text,
                IsPrivate = data.IsPrivate,
                Tags = TagsHelper.ConvertStringToTagList(data.Tags, data.GroupId),
                GroupId = data.GroupId,
                Duration = data.Duration,
                VariantsCount = data.VariantsCount,
                CreationDate = DateTime.Now,
                State = data.IsDraft ? (byte)ContentState.Draft : (byte)ContentState.Premoderated,
                HasOpenProtocol = data.HasOpenProtocol
            };

            var options = new List<Option>();
            byte optPos = 0;
            foreach (var o in data.Options)
            {
                var option = new Option
                {
                    Position = optPos,
                    Title = o.Title,
                    Description = o.Description,
                    SurveyId = survey.Id
                };
                options.Add(option);
                optPos++;
            }
            survey.Options = options;

            DataService.PerThread.ContentSet.AddObject(survey);
            DataService.PerThread.SaveChanges();

            return survey;
        }
Example #7
0
        private static Survey SurveyVote(Survey survey, ICollection<Option> options, Guid userId)
        {
            if (survey.IsFinished)
                throw new BusinessLogicException("Опрос уже завершен");
            if (survey.IsPrivate)
                GroupService.UserInGroup(userId, survey.Group, true);

            var bulletin = survey.Bulletins.SingleOrDefault(x => x.UserId == userId);
            if (bulletin != null)
                throw new BusinessLogicException("Вы уже голосовали");

            bulletin = new SurveyBulletin
            {
                UserId = userId,
                SurveyId = survey.Id,
                Result = options
            };
            DataService.PerThread.SurveyBulletinSet.AddObject(bulletin);
            DataService.PerThread.SaveChanges();

            return survey;
        }
        public Group_SurveyViewModel(Survey survey, Guid? userId)
        {
            if (survey != null)
            {
                Id = survey.Id;
                Title = survey.Title;
                Text = survey.Text;
                IsPrivate = survey.IsPrivate;
                IsFinished = survey.IsFinished;
                State = (ContentState)survey.State;
                HasOpenProtocol = survey.HasOpenProtocol;

                GroupId = survey.GroupId;

                Options = survey.Options.Select(x => new GroupSurveyOptionViewModel(x)).OrderBy(x => x.Position).ToList();
                if (survey.PublishDate.HasValue)
                {
                    StartDate = survey.PublishDate.Value;
                    if (survey.Duration.HasValue)
                    {
                        EndDate = survey.PublishDate.Value.AddDays(survey.Duration.Value);
                        if (!survey.IsFinished)
                        {
                            var ts = EndDate.Value - DateTime.Now;
                            TimeRemaining = string.Format("{0} дней {1:00}:{2:00}:{3:00}", (int)ts.TotalDays, ts.Hours, ts.Minutes, ts.Seconds);
                        }
                    }
                }

                var bulletins = survey.Bulletins;
                var voted = bulletins.Count(x => x.Result.Count != 0);
                var votedString = DeclinationService.OfNumber(voted, "человек", "человека", "человек");
                if (votedString[votedString.Length - 1] == 'а')
                    VotedUsers = "Проголосовали ";
                else
                    VotedUsers = "Проголосовало ";
                VotedUsers += votedString;
                var abstained = bulletins.Count - voted;
                var abstainedString = DeclinationService.OfNumber(abstained, "человек", "человека", "человек");
                if (abstainedString[abstainedString.Length - 1] == 'а')
                    AbstainedUsers = "Воздержались ";
                else
                    AbstainedUsers = "Воздержалось ";
                AbstainedUsers += abstainedString;

                VotesCount = 0;
                foreach (var bulletin in bulletins)
                    VotesCount += bulletin.Result.Count;
                VariantsCount = survey.VariantsCount;
                VariantsCountString = "Вы можете выбрать " + DeclinationService.OfNumber(VariantsCount, "вариант", "варианта", "вариантов");

                if (userId.HasValue)
                {
                    var blt = survey.Bulletins.SingleOrDefault(x => x.UserId == userId);
                    if (blt != null)
                    {
                        IsUserVoted = true;
                        UserBulletinId = blt.Id;
                        foreach (var o in blt.Result)
                            Options.Single(x => x.Id == o.Id).IsChecked = true;
                    }
                }
            }
        }
Example #9
0
 public static Survey UpdateSurvey(Survey survey, SurveyData data, Guid?userId)
 {
     return(_votingService.UpdateSurvey(survey, data, userId));
 }