public QuestionnaireTemplate SubmitAnsweredTemplate(int userId, QuestionnaireTemplate answeredTemplate, DateTime?now) { if (!now.HasValue) { now = Controller.GetServerDateTime(); } QuestionnaireAnswers lattestQuestioannairesAnswers = QuestionnaireAnswersRepository .GetAsQueryable <QuestionnaireAnswers>().ToList() .FirstOrDefault( q => q.UserId == userId && (DateTime.Compare(q.Date, now.Value.Date) == 0)); if (lattestQuestioannairesAnswers == null) { QuestionnaireAnswers answers = ExtractAnwsersFromAnsweredTemplate(answeredTemplate); try { QuestionnaireAnswers processedAnswers = ProceessQuestionAnswers(userId, answers, now); answeredTemplate.CoreScoreAnswer = GetLocalizedCoreScore(Constants.DEFAULT_QUESTIONNAIRE_LOCALE, processedAnswers.CoreScore); UpadatePersistedValues(processedAnswers); } catch (Exception e) { Console.WriteLine(e); } } return(answeredTemplate); }
public virtual List <QuestionnaireTemplate> GetQuestionnairHistoricalViewData(int userId, string locale, int numberToRecords) { var template = new List <QuestionnaireTemplate>(); List <QuestionnaireAnswers> lattestQuestioannairesAnswers = QuestionnaireAnswersRepository.GetAsQueryable <QuestionnaireAnswers>().ToList() .Where(q => q.UserId == userId) .OrderByDescending(q => q.Date).Skip(numberToRecords - 1).Take(1) .ToList(); lattestQuestioannairesAnswers.ForEach(specificAnswer => { GenericError error; var templateBuilder = _questionnaireRegistry.GetAveliableQuestioannaireTemplateBuilder(specificAnswer.TemplateId); var templateProcessor = _questionnaireRegistry.GetAveliableQuestioannaireProccesor(specificAnswer.TemplateId); QuestionnaireTemplate instanciatedTemplate = templateProcessor. InstansiateQuestionnaireForSpecificAnswers(GetQuestionnaireTemplate(templateBuilder.TemplateId, templateBuilder.TemplateLocaleName, out error, specificAnswer.Date, userId), specificAnswer); instanciatedTemplate.Date = specificAnswer.Date; templateBuilder.QuestionnaireCalculationAlgorithm.CalculateSingleQuestionnaireCategoryColors(instanciatedTemplate); templateBuilder.QuestionnaireCoreScoreCalculationAlgorithm.CalculateSingleQuestionnaireCoreScoreColor(instanciatedTemplate); template.Add(instanciatedTemplate); }); return(template); }
public QuestionnaireTemplate GetQuestionnaireTemplate(int questionnaireTemplateId, string locale, out GenericError error, DateTime now, int userId) { error = null; try { if (_serviceTemplate == null) { _serviceTemplate = new Lazy <QuestionnaireTemplate>(() => { var serviceTemplate = new QuestionnaireTemplate(); Model.Questionnaire.QuestionnaireTemplate questionTemplate = _questionnaireBuilder.BuildQuestionnaireTemplate(); var categoryRes = new QuestionCategories(); questionTemplate.QuestionCategories.ForEach(c => FillServiceCategory(locale, categoryRes, c)); serviceTemplate.QuestionCategories = categoryRes.QuestionCategoriesList; return(serviceTemplate); }); } } catch (Exception ex) { Logger.Controller.LogError(ex); error = ErrorClasses.Controller.GetUnknownError(); return(null); } FillDailyInfoSpecificDisplayQuestions(userId, _serviceTemplate.Value, now); return(FillCategoryGeneralDescriptions(_serviceTemplate.Value)); }
public QuestionnaireTemplate InstansiateQuestionnaireForSpecificAnswers( QuestionnaireTemplate questionnaireTemplate, QuestionnaireAnswers questionnaireAnswers) { //Fill category Questions questionnaireTemplate.QuestionCategories.ForEach(qc => { qc.CategoryQuestion.QuestionAnwer = GetInsatnciatedAnswerForQuestion(questionnaireAnswers.CategoryQuestionsAnswers, qc.CategoryQuestion, () => qc.CategoryQuestion.QuestionId); //Fill Questions Of Each Category qc.Questions.ForEach( question => { question.QuestionAnwer = GetInsatnciatedAnswerForQuestion(questionnaireAnswers.QuestionsAnswers, question, () => question.QuestionId); }); }); questionnaireTemplate.CoreScoreAnswer = GetLocalizedCoreScore(Constants.DEFAULT_QUESTIONNAIRE_LOCALE, questionnaireAnswers.CoreScore); return(questionnaireTemplate); }
public virtual List <QuestionnaireTemplate> GetQuestionnairHistoricalViewData(int userId, string locale, int numberToRecords) { var template = new List <QuestionnaireTemplate>(); List <QuestionnaireAnswers> lattestQuestioannairesAnswers = QuestionnaireAnswersRepository.GetAsQueryable <QuestionnaireAnswers>().ToList() // ReSharper disable ImplicitlyCapturedClosure .Where(q => q.UserId == userId) // ReSharper restore ImplicitlyCapturedClosure .OrderByDescending(q => q.Date).Skip(numberToRecords - 1).Take(1) .ToList(); lattestQuestioannairesAnswers.ForEach(q => { GenericError error; QuestionnaireTemplate instanciatedTemplate = InstansiateQuestionnaireForSpecificAnswers( GetQuestionnaireTemplate(q.TemplateId, locale, out error, q.Date, userId), q); instanciatedTemplate.Date = q.Date; FillDailyInfoSpecificDisplayQuestions(userId, instanciatedTemplate, q.Date); template.Add(instanciatedTemplate); }); return(template); }
public int OveralCoreScoreType(QuestionnaireTemplate instanciatedTemplate) { var ratedCategoriesScores = CalculateSingleQuestionnaireCategoryScores(instanciatedTemplate); var totalSumOfAllCategoryElements = ratedCategoriesScores.Value.Sum(); var overalCoreScoreType = GetOveralCoreScore(totalSumOfAllCategoryElements); return(overalCoreScoreType); }
public QuestionnaireAnswers ExtractAnwsersFromAnsweredTemplate(QuestionnaireTemplate answeredTemplate) { var givenAnswersToPersist = new QuestionnaireAnswers { CategoryQuestionsAnswers = new List <Model.Questionnaire.QuestionAnwer>(), QuestionsAnswers = new List <Model.Questionnaire.QuestionAnwer>() }; //Fill category Questions answeredTemplate.QuestionCategories.ForEach(qc => { if (qc.CategoryQuestion.QuestionAnwer != null) { givenAnswersToPersist.CategoryQuestionsAnswers.Add(new Model.Questionnaire.QuestionAnwer { QuestionId = qc.CategoryQuestion.QuestionId, Answer = qc.CategoryQuestion.QuestionAnwer.Answer }); qc.CategoryQuestion.QuestionAnwer = GetSpesificQuestionAnswer(qc.CategoryQuestion); //Fill Questions Of Each Category qc.Questions.ForEach(question => { if (question.QuestionAnwer != null) { givenAnswersToPersist.QuestionsAnswers.Add(new Model.Questionnaire.QuestionAnwer { QuestionId = question.QuestionId, Answer = question.QuestionAnwer.Answer }); question.QuestionAnwer = GetSpesificQuestionAnswer(question); } else { givenAnswersToPersist.QuestionsAnswers.Add(new Model.Questionnaire.QuestionAnwer { QuestionId = question.QuestionId, Answer = -1 }); question.QuestionAnwer = GetSpesificQuestionAnswer(question); } }); } }); return(givenAnswersToPersist); }
private QuestionnaireTemplate FillCategoryGeneralDescriptions(QuestionnaireTemplate serviceTemplate) { var generalDescriptions = new[] { "Energy", "General Health", "Biomechanics", "Training", "Nutrition", "Mental Energy", "Recovery" }; for (int i = 0; i < serviceTemplate.QuestionCategories.Count; i++) { serviceTemplate.QuestionCategories[i].CategoryQuestion.GeneralDescription = generalDescriptions[i]; } return(serviceTemplate); }
//private List<QuestionnaireAnswers> LattestQuestioannairesAnswers(int userId, DateTime now, // int numberToRecords) //{ // List<QuestionnaireAnswers> lattestQuestioannairesAnswers = // QuestionnaireAnswersRepository.GetAsQueryable<QuestionnaireAnswers>().ToList() // .Where(q => q.UserId == userId && // (DateTime.Compare(q.Date, now.AddDays(-1)) > 0) && // (DateTime.Compare(q.Date, now) <= 0)) // .Take(numberToRecords) // .ToList(); // return lattestQuestioannairesAnswers; //} #endregion #region Submit Questionnaire Template public QuestionnaireTemplate SubmitAnsweredTemplate(int userId, QuestionnaireTemplate answeredTemplate, DateTime?now) { var hasQuestioannairesAnswered = CheckIfQuestionnaireAlreadyAnswered(userId, now); if (!hasQuestioannairesAnswered) { var templateAnswersExtractor = _questionnaireRegistry.GetAveliableQuestioannaireProccesor(answeredTemplate.TemplateId); var templateBuilder = _questionnaireRegistry.GetAveliableQuestioannaireTemplateBuilder(answeredTemplate.TemplateId); QuestionnaireAnswers answers = templateAnswersExtractor.ExtractAnwsersFromAnsweredTemplate(answeredTemplate); try { //extract answers to persist and save them answers.CoreScore = templateBuilder.QuestionnaireCoreScoreCalculationAlgorithm.OveralCoreScoreType(answeredTemplate); answers.QuestionnaireSummaryData = templateBuilder.QuestionnaireCalculationAlgorithm.CalculateSingleQuestionnaireCategoryScores(answeredTemplate); UpadatePersistedValues(userId, answers, now); //Initialize null CategoryQuestions if any answeredTemplate.QuestionCategories.ForEach(qc => { if (qc.CategoryQuestion.QuestionAnwer == null) { qc.CategoryQuestion.QuestionAnwer = new QuestionAnwer(); } }); //fill with the results templateBuilder.QuestionnaireCalculationAlgorithm.CalculateSingleQuestionnaireCategoryColors(answeredTemplate); templateBuilder.QuestionnaireCoreScoreCalculationAlgorithm.CalculateSingleQuestionnaireCoreScoreColor(answeredTemplate); } catch (Exception e) { Console.WriteLine(e); } } return(answeredTemplate); }
public virtual List <QuestionnaireTemplate> GetQuestionnairHistoricalViewData(int userId, string locale, DateTime now, int numberToRecords) { var template = new List <QuestionnaireTemplate>(); List <QuestionnaireAnswers> lattestQuestioannairesAnswers = LattestQuestioannairesAnswers(userId, now, numberToRecords); lattestQuestioannairesAnswers.ForEach(q => { GenericError error; QuestionnaireTemplate instanciatedTemplate = InstansiateQuestionnaireForSpecificAnswers( GetQuestionnaireTemplate(q.TemplateId, locale, out error, now, userId), q); instanciatedTemplate.Date = q.Date; FillDailyInfoSpecificDisplayQuestions(userId, instanciatedTemplate, now); template.Add(instanciatedTemplate); }); return(template); }
public virtual void CalculateSingleQuestionnaireCoreScoreColor(QuestionnaireTemplate instanciatedTemplate) { var overalCoreScoreType = OveralCoreScoreType(instanciatedTemplate); instanciatedTemplate.CoreScoreAnswer = GetLocalizedCoreScore(Constants.DEFAULT_QUESTIONNAIRE_LOCALE, overalCoreScoreType); }
public abstract void CalculateSingleQuestionnaireCategoryColors(QuestionnaireTemplate answeredTemplate);
public virtual QuestionnaireSummaryData CalculateSingleQuestionnaireCategoryScores(QuestionnaireTemplate answeredTemplate) { var summaries = new QuestionnaireSummaryData { }; for (int p = 0; p < answeredTemplate.QuestionCategories.Count; p++) { var sum = answeredTemplate.QuestionCategories[p].Questions.Sum(q => q.QuestionAnwer.Answer); summaries.Value.Add(sum); } return(summaries); }
private void FillDailyInfoSpecificDisplayQuestions(int userId, QuestionnaireTemplate instanciatedTemplate, DateTime now) { try { ServiceDailyInfo weeksDailyInfos = ObjectFactory.GetInstance <IDailyInfoService>().GetDayInfoViewService(userId, 7, now); if (weeksDailyInfos != null) { DailyInfoSummaryData lastWeek = SumUpDailyInfos(weeksDailyInfos); instanciatedTemplate.QuestionCategories[instanciatedTemplate.QuestionCategories.Count - 1] .Questions[7].QuestionAnwer = new QuestionAnwer { Description = lastWeek.Rest.ToString(CultureInfo.InvariantCulture) }; instanciatedTemplate.QuestionCategories[instanciatedTemplate.QuestionCategories.Count - 1] .Questions[8].QuestionAnwer = new QuestionAnwer { Description = lastWeek.Travel.ToString(CultureInfo.InvariantCulture) }; instanciatedTemplate.QuestionCategories[instanciatedTemplate.QuestionCategories.Count - 1] .Questions[9].QuestionAnwer = new QuestionAnwer { Description = lastWeek.Hotel.ToString(CultureInfo.InvariantCulture) }; instanciatedTemplate.QuestionCategories[instanciatedTemplate.QuestionCategories.Count - 1] .Questions[10].QuestionAnwer = new QuestionAnwer { Description = "-" }; } else { instanciatedTemplate.QuestionCategories[instanciatedTemplate.QuestionCategories.Count - 1] .Questions[7].QuestionAnwer = new QuestionAnwer { Description = "-" }; instanciatedTemplate.QuestionCategories[instanciatedTemplate.QuestionCategories.Count - 1] .Questions[8].QuestionAnwer = new QuestionAnwer { Description = "-" }; instanciatedTemplate.QuestionCategories[instanciatedTemplate.QuestionCategories.Count - 1] .Questions[9].QuestionAnwer = new QuestionAnwer { Description = "-" }; instanciatedTemplate.QuestionCategories[instanciatedTemplate.QuestionCategories.Count - 1] .Questions[10].QuestionAnwer = new QuestionAnwer { Description = "-" }; } } catch (Exception e) { Console.WriteLine(e); } }