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; }
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); } } } }
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(); }
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; } }
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); }
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; } } }
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); }
public SurveyPage(Model.Survey survey) { InitializeComponent(); _survey = survey; UpdateFields(); UpdateQuestionTable(); Local(); }
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); }
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); }
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); }
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 }); } }
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"); }
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); } }
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); }
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; } }
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"); } }
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); }
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; }
public static bool IsComplete(this Model.Survey survey) { survey.CalculateStatus(); return(survey.Status.State == SurveyState.Complete); }
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"); } } } }
public static void GoToSurveyPage(Model.Survey survey) { _frame.Navigate(new SurveyPage(survey)); }
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 }); } }
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) { }