private static decimal GetScore(Model.Survey survey)
        {
            decimal totalMaxScore = 0;
            decimal totalScore    = 0;

            foreach (var page in survey.Pages.Where(p => p.IsVisible && !p.IsSummary))
            {
                foreach (var question in page.RequiredQuestions)
                {
                    var maxPoints      = question.PossibleAnswers.Max(a => a.AnswerWeight.HasValue ? a.AnswerWeight.Value : 0);
                    var selectedAnswer = question.PossibleAnswers.FirstOrDefault(a => a.IsSelected);
                    var points         = 0M;

                    if (selectedAnswer != null && selectedAnswer.AnswerWeight.HasValue)
                    {
                        points = selectedAnswer.AnswerWeight.Value;
                    }

                    totalMaxScore += maxPoints;
                    totalScore    += points;
                }
            }

            if (totalMaxScore > 0)
            {
                return(totalScore / totalMaxScore);
            }

            return(0);
        }
        public void PreSelect(Model.Survey survey, int userId, IUserService userService, ISurveyService surveyService)
        {
            var request = new SurveyRequest()
            {
                SurveyName      = Settings.SurveyNames.Enrollment,
                UserID          = userId,
                IncludeResponse = true
            };

            var isComplete = false;

            // Get Enrollment status
            var enrollmentSurvey = surveyService.GetSurvey(request);

            if (enrollmentSurvey != null)
            {
                isComplete = enrollmentSurvey.CalculateStatus().IsComplete();
            }

            // Find succession question
            var question = survey.Questions.FirstOrDefault(q => q.QuestionName == "EnrollmentComplete");

            if (question == null)
            {
                return;
            }

            // Pre-select answers based on enrollment status
            question.FindPossibleAnswer("Yes").IsSelected = isComplete;
            question.FindPossibleAnswer("No").IsSelected  = !isComplete;

            // Disable question
            question.IsDisabled = true;
        }
Пример #3
0
        private void PopulateSuggestedContent(Model.Survey survey)
        {
            if (!survey.SuggestedContentSiteID.HasValue)
            {
                return;
            }

            if (!survey.Pages.Any(p => p.SuggestedContents.Any()))
            {
                return;
            }

            var site = _cmsService.GetSite(new SiteRequest {
                SiteID = survey.SuggestedContentSiteID.Value, IncludeAll = true
            });

            var contents = site.SiteContents
                           .Where(s => s.SiteContentStatusID == (int)ContentStatus.Published && s.PublishDateUtc <= DateTime.UtcNow)
                           .OrderBy(s => s.Title)
                           .ToList();

            foreach (var page in survey.Pages)
            {
                foreach (var suggestedContent in page.SuggestedContents)
                {
                    var content = contents.FirstOrDefault(s => s.SiteContentID == suggestedContent.SiteContentID);

                    if (content != null)
                    {
                        suggestedContent.Title = content.Title;
                        suggestedContent.Url   = string.Format("https://{0}{1}", site.DomainName, content.Permalink);
                    }
                }
            }
        }
Пример #4
0
        public QuestionPage(Model.Survey survey, Model.User user)
        {
            InitializeComponent();
            // ===
            _survey = survey;
            _user   = user;
            media   = new MediaPlayer();
            media.Open(new Uri("Resources/pole_letter_correct.mp3", UriKind.Relative));
            aTimer           = new System.Timers.Timer(1000);
            aTimer.Elapsed  += OnTimedEvent;
            aTimer.AutoReset = true;
            aTimer.Enabled   = true;
            DateTime limitTime = new DateTime(0, 0);

            limitTime        = limitTime.AddMinutes(_survey.Time);
            hour             = limitTime.Hour;
            min              = limitTime.Minute;
            sec              = limitTime.Second;
            Times            = string.Format("{0:00}:{1:00}:{2:00}", hour, min, sec);
            this.DataContext = this;
            number           = 0;
            right_answer     = 0;
            ShowQuestion(number);
            Local();
        }
Пример #5
0
        public void Edit(Model.Survey survey)
        {
            if (survey == null)
            {
                throw new ArgumentNullException();
            }
            if (survey.Id == 0)
            {
                throw new ArgumentException();
            }
            try
            {
                using (var db = new SurveyContext(_app.Conn))
                {
                    db.Entry(survey).State = EntityState.Modified;
                    db.SaveChanges();

                    // === Добавляем пользователей в опрос

                    JoinUsersToSurvey(survey.Id);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Пример #6
0
        public SurveyStatus Calculate(Model.Survey survey)
        {
            var status = new SurveyStatus()
            {
                PercentComplete = GetPercentComplete(survey)
            };

            status.Pages.AddRange(survey.Pages.Where(page => !page.IsSummary).Select(page => new SurveyPageStatus()
            {
                SurveyPageID    = page.SurveyPageID,
                Name            = page.PageName,
                IsVisible       = page.IsVisible,
                PercentComplete = GetPercentComplete(page),
                State           = GetState(page)
            }));

            var visiblePages = status.Pages.Where(p => p.IsVisible).ToList();

            if (visiblePages.Count == visiblePages.Count(p => p.State == SurveyState.Complete))
            {
                status.State = SurveyState.Complete;
            }
            else if (visiblePages.Any(p => p.State == SurveyState.Complete || p.State == SurveyState.InProgress))
            {
                status.State = SurveyState.InProgress;
            }
            else
            {
                status.State = SurveyState.NotStarted;
            }

            return(status);
        }
Пример #7
0
        private void UpdateAuditFields(int auditUserId, Model.Survey survey)
        {
            UpdateAuditData(survey, auditUserId);

            var contentList = (from page in survey.Pages
                               from question in page.Questions
                               from answer in question.PossibleAnswers.Where(a => a.SuggestedContents.Any())
                               from content in answer.SuggestedContents
                               select content);

            foreach (var content in contentList)
            {
                if (content.CreateUserID <= 0)
                {
                    content.CreateUserID = auditUserId;
                }

                if (content.CreateDate == DateTime.MinValue)
                {
                    content.CreateDate = DateTime.Now;
                }

                if (content.CreateDateUtc == DateTime.MinValue)
                {
                    content.CreateDateUtc = DateTime.UtcNow;
                }
            }
        }
Пример #8
0
        private static decimal GetPercentComplete(Model.Survey survey)
        {
            var totalQuestions     = survey.Pages.Where(p => p.IsVisible).Sum(page => page.RequiredQuestions.Count);
            var completedQuestions = survey.Pages.Where(p => p.IsVisible).Sum(page => page.RequiredQuestions.Count(q => q.HasAnswer));

            return(totalQuestions > 0 ? (completedQuestions / (decimal)totalQuestions) : 0M);
        }
Пример #9
0
 public SurveyPage(Model.Survey survey)
 {
     InitializeComponent();
     _survey = survey;
     UpdateFields();
     UpdateQuestionTable();
     Local();
 }
Пример #10
0
        public static Model.Survey CalculateStatus(this Model.Survey survey)
        {
            var calculator = StatusCalculatorFactory.CreateCalculator(survey.StatusCalculator);

            survey.Status = calculator.Calculate(survey);
            survey.Status.ProgressType = calculator.ProgressType;

            return(survey);
        }
Пример #11
0
 private void GoToTest_Click(object sender, RoutedEventArgs e)
 {
     Model.Survey survey = _surveys[0];
     if (SurveysGrid.SelectedIndex != -1)
     {
         survey = (Model.Survey)SurveysGrid.SelectedItem;
     }
     Navigated.GoToQuestionPage(survey, _user);
 }
Пример #12
0
        private static void PreSelectLicenseDesignations(Model.Survey survey, User surveyUser)
        {
            if (surveyUser.Licenses == null || surveyUser.Licenses.Count == 0)
            {
                return;
            }

            var designations = surveyUser.Licenses.Where(l => l.LicenseExamTypeID == (int)LicenseExamTypes.ProfessionalDesignations).ToList();

            if (designations.Any())
            {
                var question = survey.GetQuestion(BusinessProfilePageName, "Designations");

                if (question != null && !question.PossibleAnswers.Any(a => a.IsSelected))
                {
                    designations.ForEach(d =>
                    {
                        var answers = question.PossibleAnswers.Where(a => a.AnswerText.IndexOf(d.RegistrationCategory, StringComparison.InvariantCultureIgnoreCase) != -1).ToList();

                        foreach (var answer in answers)
                        {
                            answer.IsSelected = true;
                        }

                        question.IsPreSelected = answers.Any();
                    });
                }
            }

            var nonDesignations = surveyUser.Licenses.Where(l => l.LicenseExamTypeID != (int)LicenseExamTypes.ProfessionalDesignations).ToList();

            if (nonDesignations.Any())
            {
                var question = survey.GetQuestion(BusinessProfilePageName, "Licenses");

                if (question != null)
                {
                    if (string.IsNullOrWhiteSpace(question.Answer))
                    {
                        nonDesignations.ForEach(nd =>
                        {
                            if (!string.IsNullOrEmpty(question.Answer))
                            {
                                question.Answer += ", ";
                            }

                            question.Answer += nd.Description;
                        });

                        question.IsPreSelected = true;
                    }

                    question.IsDisabled = true;
                }
            }
        }
        private static decimal GetPercentComplete(Model.Survey survey)
        {
            var allQuestions = (from p in survey.Pages
                                from q in p.Questions
                                where q.IsVisible
                                select q).ToList();
            decimal answeredQuestionCount = allQuestions.Count(q => q.HasAnswer);

            return(answeredQuestionCount / allQuestions.Count);
        }
Пример #14
0
        private static void InjectBranchLocations(Model.Survey survey, User surveyUser)
        {
            var locationQuestions = new List <SurveyQuestion>()
            {
                survey.GetQuestion(SellerCriteriaPageName, "LocationC"),
                survey.GetQuestion(BuyerCriteriaPageName, "LocationC"),
                survey.GetQuestion(SellerCriteriaPageName, "LocationS"),
                survey.GetQuestion(BuyerCriteriaPageName, "LocationS"),
                survey.GetQuestion(BuyerCriteriaPageName, "LocationB"),
                survey.GetQuestion(BusinessProfilePageName, "Location")
            };

            //
            // Add City/State options based on the branches the user is currently associated with
            //
            if (surveyUser.Branches != null && surveyUser.Branches.Any())
            {
                var cityStates = surveyUser.Branches.Where(b => !string.IsNullOrWhiteSpace(b.City) && !string.IsNullOrWhiteSpace(b.State))
                                 .Select(b => string.Format("{0}, {1}", b.City, b.State)).ToList();

                cityStates.Sort();

                for (var i = 0; i < cityStates.Count; i++)
                {
                    foreach (var question in locationQuestions)
                    {
                        question.PossibleAnswers.Add(new SurveyAnswer()
                        {
                            AnswerText             = cityStates[i],
                            SortOrder              = i,
                            SurveyQuestionID       = question.SurveyQuestionID,
                            SurveyQuestionAnswerID = (i + 1)
                        });
                    }
                }
            }

            //
            // Add an "Other" selection to all but the Business Profile Question
            //
            foreach (var question in locationQuestions.Where(question => question.PageName != BusinessProfilePageName))
            {
                var order = question.PossibleAnswers.Count;

                question.PossibleAnswers.Add(new SurveyAnswer()
                {
                    AnswerText             = "Other",
                    SortOrder              = order,
                    IsTrigger              = true,
                    SurveyQuestionID       = question.SurveyQuestionID,
                    SurveyQuestionAnswerID = question.PossibleAnswers.Count + 1
                });
            }
        }
Пример #15
0
        public void UpdateSurvey(Model.Survey survey, int auditUserId)
        {
            if (survey == null)
            {
                return;
            }

            // Ensure audit-related fields have values
            UpdateAuditFields(auditUserId, survey);

            _surveyRepository.UpdateSurvey(survey, auditUserId);

            _cacheStorage.ClearNamespace("Survey");
        }
Пример #16
0
        public void Inject(Model.Survey survey, int userId, IUserService userService, ISurveyService surveyService)
        {
            var request = new UserRequest()
            {
                UserID            = userId,
                IncludeBranchInfo = true
            };

            var surveyUser = userService.GetUsers(request).Users.FirstOrDefault();

            if (surveyUser != null)
            {
                InjectBranchLocations(survey, surveyUser);
            }
        }
Пример #17
0
        public INotification CreateNotification(SurveyNotificationType type, Model.Survey previousSurvey, Model.Survey currentSurvey, User currentUser)
        {
            INotification notification = null;

            if (type == SurveyNotificationType.BusinessConsultantEmail)
            {
                notification = new BusinessConsultantEmail(_emailService)
                {
                    CurrentUser    = currentUser,
                    PreviousSurvey = previousSurvey,
                    CurrentSurvey  = currentSurvey
                };
            }

            return(notification);
        }
        private static SurveyState GetState(Model.Survey survey)
        {
            var state           = SurveyState.NotStarted;
            var percentComplete = GetPercentComplete(survey);

            if (percentComplete > 0 && percentComplete < 1M)
            {
                state = SurveyState.InProgress;
            }

            if (percentComplete == 1M)
            {
                state = SurveyState.Complete;
            }

            return(state);
        }
Пример #19
0
        public void Add(Model.Survey survey)
        {
            try
            {
                using (var db = new SurveyContext(_app.Conn))
                {
                    db.Surveys.Add(survey);
                    db.SaveChanges();

                    // === Добавляем пользователей в опрос

                    JoinUsersToSurvey(survey.Id);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Пример #20
0
        private static void PreSelectYearsInOperation(Model.Survey survey, User surveyUser)
        {
            if (!surveyUser.SecurityProfileStartDate.HasValue)
            {
                return;
            }

            var question = survey.GetQuestion(BusinessProfilePageName, "YearsOperations");

            if (question == null)
            {
                return;
            }

            var selectedAnswer = question.PossibleAnswers.FirstOrDefault(a => a.IsSelected);

            if (selectedAnswer != null && selectedAnswer.AnswerText != "None Selected")
            {
                return;
            }

            var span  = DateTime.Today - surveyUser.SecurityProfileStartDate.Value;
            var years = (new DateTime(1, 1, 1) + span).Year - 1;

            if (years <= 5)
            {
                question.PreSelectPossibleAnswer("0 - 5 years");
            }
            else if (years > 5 && years <= 10)
            {
                question.PreSelectPossibleAnswer("6 - 10 years");
            }
            else if (years > 10 && years <= 20)
            {
                question.PreSelectPossibleAnswer("11 - 20 years");
            }
            else
            {
                question.PreSelectPossibleAnswer("More than 20 years");
            }
        }
Пример #21
0
        public void PreSelect(Model.Survey survey, int userId, IUserService userService, ISurveyService surveyService)
        {
            var request = new UserRequest()
            {
                UserID             = userId,
                IncludeLicenseInfo = true
            };

            var surveyUser = userService.GetUsers(request).Users.FirstOrDefault();

            if (surveyUser != null)
            {
                PreSelectYearsInOperation(survey, surveyUser);

                PreSelectBrokerDealerAffiliation(survey, surveyUser);

                PreSelectLicenseDesignations(survey, surveyUser);

                PreSelectProductionOptions(survey, surveyUser);
            }
        }
        public SurveyStatus Calculate(Model.Survey survey)
        {
            var status = new SurveyStatus()
            {
                Score           = GetScore(survey),
                PercentComplete = GetPercentComplete(survey),
                State           = GetState(survey)
            };

            status.Pages.AddRange(survey.Pages.Where(page => !page.IsSummary).Select(page => new SurveyPageStatus()
            {
                SurveyPageID    = page.SurveyPageID,
                Name            = page.PageName,
                IsVisible       = page.IsVisible,
                Score           = GetScore(page),
                PercentComplete = GetPercentComplete(page),
                State           = GetState(page)
            }));

            return(status);
        }
Пример #23
0
        private static void PreSelectBrokerDealerAffiliation(Model.Survey survey, User surveyUser)
        {
            if (!surveyUser.SecurityProfileStartDate.HasValue)
            {
                return;
            }

            var question = survey.GetQuestion(BusinessProfilePageName, "BD");

            if (question == null)
            {
                return;
            }

            if (string.IsNullOrWhiteSpace(question.Answer))
            {
                question.Answer = surveyUser.AffiliateName;
            }

            question.IsDisabled    = true;
            question.IsPreSelected = true;
        }
Пример #24
0
        public static bool IsComplete(this Model.Survey survey)
        {
            survey.CalculateStatus();

            return(survey.Status.State == SurveyState.Complete);
        }
Пример #25
0
        private static void PreSelectProductionOptions(Model.Survey survey, User surveyUser)
        {
            var aum         = surveyUser.AUM ?? 0;
            var gdc         = surveyUser.GDCT12 ?? 0;
            var aumQuestion = survey.GetQuestion(BusinessProfilePageName, "AUM");
            var gdcQuestion = survey.GetQuestion(BusinessProfilePageName, "GDC");

            if (aumQuestion != null)
            {
                var answer = aumQuestion.PossibleAnswers.FirstOrDefault(a => a.IsSelected);

                if (answer == null || answer.AnswerText == "None Selected")
                {
                    if (aum.GreaterThanAndLessOrEqualTo(-1, 10000000))
                    {
                        aumQuestion.PreSelectPossibleAnswer("Less than $10,000,000");
                    }

                    if (aum.GreaterThanAndLessOrEqualTo(10000000, 25000000))
                    {
                        aumQuestion.PreSelectPossibleAnswer("$10,000,001 - $25,000,000");
                    }

                    if (aum.GreaterThanAndLessOrEqualTo(25000000, 50000000))
                    {
                        aumQuestion.PreSelectPossibleAnswer("$25,000,001 - $50,000,000");
                    }

                    if (aum.GreaterThanAndLessOrEqualTo(50000000, 75000000))
                    {
                        aumQuestion.PreSelectPossibleAnswer("$50,000,001 - $75,000,000");
                    }

                    if (aum.GreaterThanAndLessOrEqualTo(75000000, 100000000))
                    {
                        aumQuestion.PreSelectPossibleAnswer("$75,000,001 - $100,000,000");
                    }

                    if (aum > 100000000)
                    {
                        aumQuestion.PreSelectPossibleAnswer("More than $100,000,000");
                    }
                }
            }

            if (gdcQuestion != null)
            {
                var answer = gdcQuestion.PossibleAnswers.FirstOrDefault(a => a.IsSelected);

                if (answer == null || answer.AnswerText == "None Selected")
                {
                    if (gdc.GreaterThanAndLessOrEqualTo(-1, 100000))
                    {
                        gdcQuestion.PreSelectPossibleAnswer("Less than $100,000");
                    }

                    if (gdc.GreaterThanAndLessOrEqualTo(100000, 250000))
                    {
                        gdcQuestion.PreSelectPossibleAnswer("$100,001 - $250,000");
                    }

                    if (gdc.GreaterThanAndLessOrEqualTo(250000, 500000))
                    {
                        gdcQuestion.PreSelectPossibleAnswer("$250,001 - $500,000");
                    }

                    if (gdc.GreaterThanAndLessOrEqualTo(500000, 1000000))
                    {
                        gdcQuestion.PreSelectPossibleAnswer("$500,001 - $1,000,000");
                    }

                    if (gdc.GreaterThanAndLessOrEqualTo(1000000, 2500000))
                    {
                        gdcQuestion.PreSelectPossibleAnswer("$1,000,001 - $2,500,000");
                    }

                    if (gdc.GreaterThanAndLessOrEqualTo(2500000, 5000000))
                    {
                        gdcQuestion.PreSelectPossibleAnswer("$2,500,001 - $5,000,000");
                    }

                    if (gdc.GreaterThanAndLessOrEqualTo(5000000, 10000000))
                    {
                        gdcQuestion.PreSelectPossibleAnswer("$5,000,001 - $10,000,000");
                    }

                    if (gdc > 10000000)
                    {
                        gdcQuestion.PreSelectPossibleAnswer("More than $10,000,000");
                    }
                }
            }
        }
Пример #26
0
 public static void GoToSurveyPage(Model.Survey survey)
 {
     _frame.Navigate(new SurveyPage(survey));
 }
Пример #27
0
        private void ApplySurveyResponse(Model.Survey survey, SurveyResponse surveyResponse)
        {
            // Select/Populate the answers on the survey object based on the response
            foreach (var answer in surveyResponse.Answers)
            {
                var question = survey.Questions.Find(q => q.SurveyQuestionID == answer.SurveyQuestionID);

                if (question != null)
                {
                    switch (question.AnswerType)
                    {
                    case AnswerType.MultiSelect:
                    case AnswerType.Select:
                    {
                        var option = question.PossibleAnswers.FirstOrDefault(a => a.AnswerText == answer.Answer);

                        if (option != null)
                        {
                            option.IsSelected = true;
                        }
                    }
                    break;

                    case AnswerType.Text:
                    {
                        if (question.InputType == InputType.MultiText)
                        {
                            question.PossibleAnswers.Add(new SurveyAnswer()
                                {
                                    SurveyQuestionID = answer.SurveyQuestionID,
                                    AnswerText       = answer.Answer
                                });
                            question.PossibleAnswers.Last().IsSelected = true;
                        }
                        else
                        {
                            question.Answer = answer.Answer;
                        }
                    }
                    break;
                    }
                }
            }

            // Set the raw Current Response
            survey.CurrentResponse = surveyResponse;

            // Set the audit info
            survey.CreateUserID  = surveyResponse.CreateUserID;
            survey.CreateDate    = surveyResponse.CreateDate;
            survey.CreateDateUtc = surveyResponse.CreateDateUtc;
            survey.ModifyUserID  = surveyResponse.ModifyUserID;
            survey.ModifyDate    = surveyResponse.ModifyDate;
            survey.ModifyDateUtc = surveyResponse.ModifyDateUtc;

            // Set the active page
            survey.Pages.First(p => p.SurveyPageID == surveyResponse.SelectedSurveyPageID).IsSelected = true;

            // Now, run the rulesets
            if (!string.IsNullOrEmpty(survey.RulesetCoreName))
            {
                _ruleService.ExecuteRuleSet(new RulesetRequest()
                {
                    Name = survey.RulesetCoreName, Survey = survey, EntityType = RulesetRequestEntityType.Survey
                });
            }

            if (!string.IsNullOrEmpty(survey.RulesetValidationName))
            {
                _ruleService.ExecuteRuleSet(new RulesetRequest()
                {
                    Name = survey.RulesetCoreName, Survey = survey, EntityType = RulesetRequestEntityType.Survey
                });
            }
        }
Пример #28
0
 public static void GoToQuestionPage(Model.Survey survey, Model.User user)
 {
     _frame.Navigate(new QuestionPage(survey, user));
 }
 public void Inject(Model.Survey survey, int userId, IUserService userService, ISurveyService surveyService)
 {
 }