Пример #1
0
        /// <summary>
        /// For Slider and range slider
        /// </summary>
        /// <param name="questionId"></param>
        public QuestionMetricViewModel forSliderAverage(int questionId)
        {
            QuestionMetricViewModel questionMetric = new QuestionMetricViewModel();
            var question = _dBContext.SurveyQuestions.Where(x => x.StatusId == (int)EnumStatus.Published && x.SurveyQuestionId == questionId).FirstOrDefault();

            questionMetric.Question    = question.Title;
            questionMetric.Explanation = question.Subtitle;

            var options = _dBContext.SurveyQuestionOptions.Where(x => x.SurveyQuestionId == questionId).ToList();
            var total   = _dBContext.SurveyFeedbackQuestionOptions.Where(x => x.SurveyQuestionId == questionId).Count();

            var minValue = Convert.ToInt32(options.Where(x => x.OptionKey == "min").Select(x => x.OptionValue).FirstOrDefault());
            var maxValue = Convert.ToInt32(options.Where(x => x.OptionKey == "max").Select(x => x.OptionValue).FirstOrDefault());

            var userSelected = _dBContext.SurveyFeedbackQuestionOptions.Where(x => x.SurveyQuestionId == questionId && !string.IsNullOrEmpty(x.SurveyQuestionOptionId)).ToList();
            //double avg = userSelected.Average(x => x - minValue);

            List <OptionsMetric> optionsMetrics = new List <OptionsMetric>();

            foreach (var item in userSelected)
            {
                OptionsMetric optionsMetric = new OptionsMetric();
                optionsMetric.optionId    = Convert.ToInt32(item.SurveyQuestionOptionId);
                optionsMetric.optionText  = item.CustomAnswer;
                optionsMetric.optionCount = Convert.ToInt32(item.SurveyQuestionOptionId);
                optionsMetrics.Add(optionsMetric);
            }

            questionMetric.options = optionsMetrics;
            return(questionMetric);
        }
Пример #2
0
        /// <summary>
        /// Star rating average
        /// </summary>
        /// <param name="questionId"></param>
        public QuestionMetricViewModel forStarRatingAverage(int questionId)
        {
            QuestionMetricViewModel questionMetric = new QuestionMetricViewModel();
            var question = _dBContext.SurveyQuestions.Where(x => x.StatusId == (int)EnumStatus.Published && x.SurveyQuestionId == questionId).FirstOrDefault();

            questionMetric.Question    = question.Title;
            questionMetric.Explanation = question.Subtitle;

            var options = _dBContext.SurveyQuestionOptions.Where(x => x.SurveyQuestionId == questionId).ToList();
            var total   = _dBContext.SurveyFeedbackQuestionOptions.Where(x => x.SurveyQuestionId == questionId).Count();

            var userSelected = _dBContext.SurveyFeedbackQuestionOptions.Where(x => x.SurveyQuestionId == questionId).Select(x => x.SurveyQuestionOptionId).ToList();
            //double avg = userSelected.Average(x => x - minValue);

            List <OptionsMetric> optionsMetrics    = new List <OptionsMetric>();
            OptionsMetric        tempOptionsMetric = new OptionsMetric();

            tempOptionsMetric.optionId      = 0;
            tempOptionsMetric.optionText    = "Average Rating";
            tempOptionsMetric.optionCount   = userSelected.Count();
            tempOptionsMetric.optionAverage = userSelected.Where(x => !string.IsNullOrEmpty(x)).Average(x => Convert.ToInt32(x));
            optionsMetrics.Add(tempOptionsMetric);
            questionMetric.options = optionsMetrics;
            return(questionMetric);
        }
Пример #3
0
        /// <summary>
        /// For multiple star rating average
        /// </summary>
        /// <param name="questionId"></param>
        /// <returns></returns>
        public QuestionMetricViewModel forMultipleStarRatings(int questionId)
        {
            QuestionMetricViewModel questionMetric = new QuestionMetricViewModel();
            var question = _dBContext.SurveyQuestions.Where(x => x.StatusId == (int)EnumStatus.Published && x.SurveyQuestionId == questionId).FirstOrDefault();

            questionMetric.Question    = question.Title;
            questionMetric.Explanation = question.Subtitle;

            var options = _dBContext.SurveyQuestionOptions.Where(x => x.SurveyQuestionId == questionId).ToList();
            var total   = _dBContext.SurveyFeedbackQuestionOptions.Where(x => x.SurveyQuestionId == questionId).Count();
            var count   = 0;
            List <OptionsMetric> optionsMetrics = new List <OptionsMetric>();

            foreach (var item in options)
            {
                var userSelected = _dBContext.SurveyFeedbackQuestionOptions.Where(x => x.SurveyQuestionId == questionId && x.SurveyQuestionOptionId == item.SurveyQuestionOptionId.ToString()).Select(x => x.CustomAnswer).ToList();

                OptionsMetric optionsMetric = new OptionsMetric();
                optionsMetric.optionId      = item.SurveyQuestionOptionId;
                optionsMetric.optionText    = item.OptionValue;
                optionsMetric.optionCount   = userSelected.Count();
                optionsMetric.optionAverage = userSelected.Where(x => !string.IsNullOrEmpty(x)).Average(x => Convert.ToInt32(x));
                count += optionsMetric.optionCount;
                optionsMetrics.Add(optionsMetric);
            }
            questionMetric.options = optionsMetrics;
            return(questionMetric);
        }
Пример #4
0
        /// <summary>
        /// For multiple star rating average
        /// </summary>
        /// <param name="questionId"></param>
        /// <returns></returns>
        public QuestionMetricViewModel forCustomRatings(int questionId)
        {
            QuestionMetricViewModel questionMetric = new QuestionMetricViewModel();
            var question = _dBContext.SurveyQuestions.Where(x => x.StatusId == (int)EnumStatus.Published && x.SurveyQuestionId == questionId).FirstOrDefault();

            questionMetric.Question    = question.Title;
            questionMetric.Explanation = question.Subtitle;

            var options         = _dBContext.SurveyQuestionOptions.Where(x => x.SurveyQuestionId == questionId).OrderBy(x => x.OptionKey).ToList();
            var feedbackOptions = _dBContext.SurveyFeedbackQuestionOptions.Where(x => x.SurveyQuestionId == questionId).ToList();
            var count           = 0;
            List <OptionsMetric> optionsMetrics = new List <OptionsMetric>();

            foreach (var item in options.Where(x => x.OptionKey.StartsWith("value")))
            {
                OptionsMetric optionsMetric = new OptionsMetric();
                optionsMetric.optionId   = item.SurveyQuestionOptionId;
                optionsMetric.optionText = item.OptionValue;

                List <OptionsMetric> subOptionsMetrics = new List <OptionsMetric>();
                var currentOptionSelectedChoicesList   = feedbackOptions.Where(x => x.SurveyQuestionOptionId == item.SurveyQuestionOptionId.ToString());

                foreach (var subitem in options.Where(x => x.OptionKey.StartsWith("x_value")))
                {
                    var userSelected = currentOptionSelectedChoicesList.Where(x => x.CustomAnswer == subitem.SurveyQuestionOptionId.ToString()).Select(x => x.CustomAnswer).ToList();

                    OptionsMetric subOptionsMetric = new OptionsMetric();
                    subOptionsMetric.optionId      = subitem.SurveyQuestionOptionId;
                    subOptionsMetric.optionText    = subitem.OptionValue;
                    subOptionsMetric.optionCount   = userSelected.Where(x => x == subitem.SurveyQuestionOptionId.ToString()).Count();
                    subOptionsMetric.optionAverage = (Convert.ToDouble(subOptionsMetric.optionCount) / currentOptionSelectedChoicesList.Count()) * 100;
                    count += subOptionsMetric.optionCount;
                    subOptionsMetrics.Add(subOptionsMetric);
                }
                optionsMetric.subOptions = subOptionsMetrics;
                optionsMetrics.Add(optionsMetric);
            }
            questionMetric.options = optionsMetrics;
            return(questionMetric);
        }
Пример #5
0
        /// <summary>
        /// Can be used for Radio button, checkboxes,
        /// Image radio buttons and checkboxes
        /// </summary>
        /// <param name="questionId"></param>
        public QuestionMetricViewModel forCountAndAverage(int questionId)
        {
            QuestionMetricViewModel questionMetric = new QuestionMetricViewModel();
            var question = _dBContext.SurveyQuestions.Where(x => x.StatusId == (int)EnumStatus.Published && x.SurveyQuestionId == questionId).FirstOrDefault();

            questionMetric.Question    = question.Title;
            questionMetric.Explanation = question.Subtitle;

            var options = _dBContext.SurveyQuestionOptions.Where(x => x.SurveyQuestionId == questionId).ToList();
            var total   = _dBContext.SurveyUserQuestionOptions.Where(x => x.SurveyQuestionId == questionId).Count();
            var count   = 0;
            List <OptionsMetric> optionsMetrics = new List <OptionsMetric>();

            foreach (var item in options)
            {
                OptionsMetric optionsMetric = new OptionsMetric();
                optionsMetric.optionId      = item.SurveyQuestionOptionId;
                optionsMetric.optionText    = item.OptionValue;
                optionsMetric.optionCount   = _dBContext.SurveyUserQuestionOptions.Where(x => x.SurveyQuestionId == questionId && x.SurveyQuestionOptionId.Equals(item.SurveyQuestionOptionId.ToString())).Count();
                optionsMetric.optionAverage = (Convert.ToDouble(optionsMetric.optionCount) / total) * 100;
                count += optionsMetric.optionCount;
                optionsMetrics.Add(optionsMetric);
            }


            if (total != count)
            {
                OptionsMetric tempOptionsMetric = new OptionsMetric();
                tempOptionsMetric.optionId      = 0;
                tempOptionsMetric.optionText    = "No Option Seletected";
                tempOptionsMetric.optionCount   = total - count;
                tempOptionsMetric.optionAverage = (Convert.ToDouble(tempOptionsMetric.optionCount) / total) * 100;
                optionsMetrics.Add(tempOptionsMetric);
            }

            questionMetric.options = optionsMetrics;
            return(questionMetric);
        }
Пример #6
0
        public IActionResult UserSurveyReports(string surveyGuid)
        {
            SurveyMetrics metric        = new SurveyMetrics(_dBContext, _mapper);
            string        userguid      = Request.Headers[Constants.UserToken];
            string        decyrptstring = Security.Decrypt(userguid);

            if (string.IsNullOrEmpty(decyrptstring))
            {
                return(BadRequest(Messages.UnauthorizedUserError));
            }

            User user = _dBContext.User.Where(x => x.UserGuid == decyrptstring).FirstOrDefault();

            if (user == null)
            {
                return(BadRequest(Messages.UserNotFoundError));
            }

            Survey survey = _dBContext.Survey.Where(x => x.CreatedBy == user.Userid && x.SurveyGuid == surveyGuid).FirstOrDefault();

            if (survey == null)
            {
                return(BadRequest(Messages.SurveyNotFoundError));
            }

            List <SurveyQuestions> surveyQuestions = _dBContext.SurveyQuestions.Where(x => x.StatusId != (int)EnumStatus.Deleted && x.SurveyId == survey.Surveyid).ToList();

            List <QuestionType> questionType = _dBContext.QuestionType.ToList();

            SurveyMetricViewModel          surveyMetric    = new SurveyMetricViewModel();
            List <QuestionMetricViewModel> questionMetrics = new List <QuestionMetricViewModel>();

            foreach (var item in surveyQuestions)
            {
                QuestionMetricViewModel questionMetric = new QuestionMetricViewModel();
                var type = questionType.Where(x => x.TypeId == item.TypeId).Select(x => x.TypeCode).FirstOrDefault();
                switch (type)
                {
                case "radiobuttons":
                    questionMetric = metric.forCountAndAverage(item.SurveyQuestionId);
                    break;

                case "multiple":
                    questionMetric = metric.forCountAndAverage(item.SurveyQuestionId);
                    break;

                case "imageradiobuttons":
                    questionMetric = metric.forCountAndAverage(item.SurveyQuestionId);
                    break;

                case "imagemultiple":
                    questionMetric = metric.forCountAndAverage(item.SurveyQuestionId);
                    break;

                case "slider":
                    questionMetric = metric.forSliderAverage(item.SurveyQuestionId);
                    break;

                case "rangeslider":
                    questionMetric = metric.forSliderAverage(item.SurveyQuestionId);
                    break;

                case "starrating":
                    questionMetric = metric.forStarRatingAverage(item.SurveyQuestionId);
                    break;

                case "multiplerating":
                    questionMetric = metric.forMultipleStarRatings(item.SurveyQuestionId);
                    break;

                case "customrating":
                    questionMetric = metric.forCustomRatings(item.SurveyQuestionId);
                    break;

                default:
                    break;
                }
                questionMetric.QuestionType            = type;
                questionMetric.originalQuestionOptions = _dBContext.SurveyQuestionOptions.Where(x => x.SurveyQuestionId == item.SurveyQuestionId).ToList();

                questionMetrics.Add(questionMetric);
            }

            surveyMetric.Title       = survey.Welcometitle;
            surveyMetric.Description = survey.Welcomedescription;
            surveyMetric.logo        = survey.Welcomeimage;
            surveyMetric.Questions   = questionMetrics;
            return(Ok(surveyMetric));
        }
Пример #7
0
        public IActionResult UserSurveyReports(string surveyGuid, int surveyQuestionId)
        {
            SurveyMetrics metric = new SurveyMetrics(_dBContext, _mapper);
            string        userId = Request.Headers[Constants.UserToken];
            User          user;

            _memoryCache.TryGetValue(userId, out user);
            if (user == null)
            {
                return(Unauthorized(Messages.UserNotFoundError));
            }

            Survey survey = _dBContext.Survey.Where(x => x.CreatedBy == user.Userid && x.SurveyGuid == surveyGuid).FirstOrDefault();

            if (survey == null)
            {
                return(BadRequest(Messages.SurveyNotFoundError));
            }

            SurveyQuestions surveyQuestion = _dBContext.SurveyQuestions.Where(x => x.StatusId != (int)EnumStatus.Deleted && x.SurveyId == survey.Surveyid && x.SurveyQuestionId == surveyQuestionId).ToList().FirstOrDefault();

            List <QuestionType> questionType = _dBContext.QuestionType.ToList();

            SurveySingleMetricViewModel surveyMetric   = new SurveySingleMetricViewModel();
            QuestionMetricViewModel     questionMetric = new QuestionMetricViewModel();
            var type = questionType.Where(x => x.TypeId == surveyQuestion.TypeId).Select(x => x.TypeCode).FirstOrDefault();

            switch (type)
            {
            case "radiobuttons":
                questionMetric = metric.forCountAndAverage(surveyQuestion.SurveyQuestionId);
                break;

            case "multiple":
                questionMetric = metric.forCountAndAverage(surveyQuestion.SurveyQuestionId);
                break;

            case "imageradiobuttons":
                questionMetric = metric.forCountAndAverage(surveyQuestion.SurveyQuestionId);
                break;

            case "imagemultiple":
                questionMetric = metric.forCountAndAverage(surveyQuestion.SurveyQuestionId);
                break;

            case "slider":
                questionMetric = metric.forSliderAverage(surveyQuestion.SurveyQuestionId);
                break;

            case "rangeslider":
                questionMetric = metric.forSliderAverage(surveyQuestion.SurveyQuestionId);
                break;

            case "starrating":
                questionMetric = metric.forStarRatingAverage(surveyQuestion.SurveyQuestionId);
                break;

            case "multiplerating":
                questionMetric = metric.forMultipleStarRatings(surveyQuestion.SurveyQuestionId);
                break;

            case "customrating":
                questionMetric = metric.forCustomRatings(surveyQuestion.SurveyQuestionId);
                break;

            default:
                break;
            }
            questionMetric.QuestionType            = type;
            questionMetric.originalQuestionOptions = _dBContext.SurveyQuestionOptions.Where(x => x.SurveyQuestionId == surveyQuestion.SurveyQuestionId).ToList();
            surveyMetric.Title       = survey.Welcometitle;
            surveyMetric.Description = survey.Welcomedescription;
            surveyMetric.logo        = survey.Welcomeimage;
            surveyMetric.Question    = questionMetric;
            return(Ok(surveyMetric));
        }