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);
        }
示例#2
0
        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);
        }
示例#6
0
        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);
        }
示例#9
0
        //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);
        }
示例#11
0
        public virtual void CalculateSingleQuestionnaireCoreScoreColor(QuestionnaireTemplate instanciatedTemplate)
        {
            var overalCoreScoreType = OveralCoreScoreType(instanciatedTemplate);

            instanciatedTemplate.CoreScoreAnswer = GetLocalizedCoreScore(Constants.DEFAULT_QUESTIONNAIRE_LOCALE, overalCoreScoreType);
        }
示例#12
0
 public abstract void CalculateSingleQuestionnaireCategoryColors(QuestionnaireTemplate answeredTemplate);
示例#13
0
        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);
            }
        }