public IList <ResponseDTO> GetResponsesForStudyCoordinator(string coordinatorId)
        {
            List <ResponseDTO> responses = new List <ResponseDTO>();

            var idsOfSurveysForCoordinator = from s in db.X_Coordinator_Groups

                                             join g in db.X_Survey_Groups.Include("Survey") on s.Id equals g.StudyGroupId

                                             where s.CoordinatorId.Equals(coordinatorId)

                                             select g.Id;

            foreach (var surveyId in idsOfSurveysForCoordinator.ToList())
            {
                var responseList = from response in db.SurveyResponses.Include("Survey").Include("Question").Include("User")
                                   join question in db.Questions on response.QuestionId equals question.Id
                                   join survey in db.X_Survey_Groups.Include("Survey").Include("StudyGroup") on response.SurveyId equals survey.Id
                                   join study in db.StudyGroups on survey.StudyGroupId equals study.Id
                                   join user in db.Users on response.UserId equals user.Id
                                   where response.SurveyId == surveyId
                                   select new { response, question, survey, surveyObj = survey.Survey, study, user }
                ;
                var groupedResponses = responseList.GroupBy(p => p.response.SurveyId, p => new { p.response, p.question, p.survey, p.surveyObj, p.study, p.user }, (key, g) => new { SurveyId = key, Value = g.ToList() }).ToList();
                List <QuestionResponseDTO> questions = new List <QuestionResponseDTO>();
                foreach (var r in groupedResponses)
                {
                    questions.Clear();
                    foreach (var p in r.Value.ToList())
                    {
                        var questionDTO = new QuestionResponseDTO
                        {
                            ResponseReceivedTime = p.response.ResponseReceivedTime,
                            ResponseText         = p.response.ResponseText,
                            QuestionText         = p.question.QuestionText,
                            QuestionId           = p.question.Id,
                            QuestionType         = p.question.QuestionType,
                            QuestionFrequency    = p.survey.FrequencyOfNotifications + "",
                            Options = p.question.Options,
                        };
                        questions.Add(questionDTO);
                    }

                    var responseDTO = new ResponseDTO
                    {
                        SurveyId          = r.Value.ElementAt(0).response.SurveyId,
                        SurveyName        = r.Value.ElementAt(0).surveyObj.SurveyName,
                        UserName          = r.Value.ElementAt(0).user.UserName,
                        QuestionResponses = questions,
                        StudyGroupName    = r.Value.ElementAt(0).study.StudyGroupName
                    };

                    responses.Add(responseDTO);
                }
            }
            return(responses);
        }
Example #2
0
 public IHttpActionResult GetAnyQuestion(int questionId)
 {
     try
     {
         using (var _db = new DatabaseContext())
         {
             QuestionServices qServices = new QuestionServices(_db);
             var q = qServices.GetAnyQuestion <DepartmentQuestion>(questionId);
             QuestionResponseDTO questionResponseDTO = new QuestionResponseDTO
             {
                 QuestionId = q.Id,
                 ////SchoolId = ,
                 //SchoolName = q.School.Name,
                 ////DepartmentId = ,
                 DepartmentName = q.SchoolDepartment.Department.Name,
                 ////CourseId = ,
                 //CourseName = ,
                 AccountId         = q.AccountId,
                 AccountName       = q.Account.UserName,
                 Text              = q.Text,
                 ExpNeededToAnswer = q.ExpNeededToAnswer,
                 IsClosed          = q.IsClosed,
                 SpamCount         = q.SpamCount,
                 AnswerCount       = q.Answers.Count,
                 DateCreated       = q.DateCreated,
                 DateUpdated       = q.DateUpdated
             };
             return(Content(HttpStatusCode.OK, questionResponseDTO));
         }
     }
     catch (Exception ex) when(ex is ArgumentException)
     {
         return(Content(HttpStatusCode.NoContent, ex.Message));
     }
     catch (Exception ex)
     {
         return(Content(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
Example #3
0
        void DoBindings()
        {
            QuestionResponseDTO existingResponse = null;

            if (Response.QuestionResponse.IsSome <QuestionResponseDTO>())
            {
                existingResponse = Response.QuestionResponse.Value;
            }
            switch (Response.Question.QuestionType)
            {
            case QuestionTypeEnum.Text:
                TxtAnswer = Response.IsAnswered() ? existingResponse.TextResponse : "";
                break;

            case QuestionTypeEnum.Rating:
                RatingAnswer = Response.IsAnswered() ? existingResponse.RatingResponse : Response.Question.RatingMin;
                break;

            case QuestionTypeEnum.SingleChoice:
                SingleOptionAnswer = Response.IsAnswered() ? existingResponse.SingleOptionResponseOptionId : Guid.Empty;
                break;

            case QuestionTypeEnum.MultiChoice:
                MultiOptionAnswers = Response.Question.Options
                                     .Select(n => new CheckBoxBinding
                {
                    ChoiceId  = n.OptionId,
                    ChoiceTxt = n.Text,
                    Selected  = Response.IsAnswered()
                                                                ? existingResponse.MultiOptionResponseOptionIds.Contains(n.OptionId)
                                                                : false
                })
                                     .ToList();
                break;
            }
        }
        public IList <ResponseDTO> GetSurveyResponseOfUser(string userId)
        {
            List <ResponseDTO> responses = new List <ResponseDTO>();

            var user = db.Users.Where(u => u.Id.Equals(userId)).FirstOrDefault();

            var responseList = from response in db.SurveyResponses.Include("Survey").Include("Question")
                               join question in db.Questions on response.QuestionId equals question.Id
                               join survey in db.X_Survey_Groups.Include("Survey").Include("StudyGroup") on response.SurveyId equals survey.Id
                               join study in  db.StudyGroups on survey.StudyGroupId equals study.Id
                               //group response by response.SurveyId into g
                               select new { response, question, survey, surveyObj = survey.Survey, study }
            ;
            var groupedResponses = responseList.GroupBy(p => p.response.SurveyId, p => new { p.response, p.question, p.survey, p.surveyObj, p.study }, (key, g) => new { SurveyId = key, Value = g.ToList() }).ToList();
            List <QuestionResponseDTO> questions = new List <QuestionResponseDTO>();

            foreach (var r in groupedResponses)
            {
                questions.Clear();
                foreach (var p in r.Value.ToList())
                {
                    var questionDTO = new QuestionResponseDTO
                    {
                        ResponseReceivedTime = p.response.ResponseReceivedTime,
                        ResponseText         = p.response.ResponseText,
                        QuestionText         = p.question.QuestionText,
                        QuestionId           = p.question.Id,
                        QuestionType         = p.question.QuestionType,
                        QuestionFrequency    = p.survey.FrequencyOfNotifications + "",
                        Options = p.question.Options,
                    };
                    questions.Add(questionDTO);
                }

                var responseDTO = new ResponseDTO
                {
                    SurveyId          = r.Value.ElementAt(0).response.SurveyId,
                    SurveyName        = r.Value.ElementAt(0).surveyObj.SurveyName,
                    UserName          = r.Value.ElementAt(0).response.User.UserName,
                    QuestionResponses = questions,
                    StudyGroupName    = r.Value.ElementAt(0).study.StudyGroupName
                };

                responses.Add(responseDTO);
            }

            /* var surveys = db.SurveyResponses
             *               .Where(r => r.UserId.Equals(userId))
             *               .Include("Question")
             *               .Include("Survey")
             *               .Select(s => new { s, Question = s.Question, survey = s.Survey})
             *               .ToList()
             *               ;
             *
             * //var test = surveys.GroupBy(r => r.SurveyId).ToList();
             *
             * //var groupsAssociated = db.X_User_Groups.Where(u => u.UserId.Equals(userId));
             *
             *
             * /* var surveysOfUser = from u in db.X_Survey_Groups
             *                   join r in db.X_User_Groups.Include("User")
             *                   on u.StudyGroupId equals r.StudyGroupId
             *                   where r.UserId.Equals(userId)
             *                   select new { r, u };
             *
             * foreach (var survey in surveysOfUser.ToList())
             * {
             *   var responsesForQuestionsInSurvey = db.SurveyResponses
             *                                            .Where(r => r.SurveyId == survey.u.SurveyId)
             *                                            .Where(r => r.UserId.Equals(survey.r.UserId))
             *                                            .Include(r => r.Question)
             *                                            .Select(r => new QuestionResponseDTO
             *                                            {
             *                                                ResponseReceivedTime = r.ResponseReceivedTime,
             *                                                ResponseText = r.ResponseText,
             *                                                QuestionText = r.Question.QuestionText,
             *                                                QuestionId = r.Question.Id,
             *                                                QuestionType = r.Question.QuestionType,
             *                                                Options = r.Question.Options
             *                                            })
             *                                            .ToList();
             *
             *   var responseDTO = new ResponseDTO
             *   {
             *       SurveyId = survey.u.SurveyId,
             *       UserName = survey.r.User.UserName,
             *       QuestionResponses = responsesForQuestionsInSurvey
             *   };
             *
             *   responses.Add(responseDTO);
             * }*/

            /* foreach (var group in groupsAssociated)
             * {
             *   var surveysForStudyGroup = db.X_Survey_Groups.Where(r => r.StudyGroupId == group.StudyGroupId);
             *
             *   foreach (var s in surveysForStudyGroup)
             *   {
             *       var responsesForQuestionsInSurvey = db.SurveyResponses
             *                                              .Where(r => r.SurveyId == s.SurveyId)
             *                                              .Include(r => r.Question)
             *                                              .Select(r => new QuestionResponseDTO
             *                                              {
             *                                                  ResponseReceivedTime = r.ResponseReceivedTime,
             *                                                  ResponseText = r.ResponseText,
             *                                                  QuestionText = r.Question.QuestionText,
             *                                                  QuestionId = r.Question.Id,
             *                                                  QuestionType = r.Question.QuestionType,
             *                                                  Options = r.Question.Options
             *                                              })
             *                                              .ToList();
             *
             *       var responseDTO = new ResponseDTO
             *       {
             *           SurveyId = s.SurveyId,
             *           //UserName = user.UserName,
             *           QuestionResponses = responsesForQuestionsInSurvey
             *       };
             *
             *       responses.Add(responseDTO);
             *   }
             * }*/



            return(responses);

            /*
             * var result = db.SurveyResponses.Include(r => r.StudyGroup)
             *                              .Include(r => r.Survey)
             *                              .Include(r => r.Survey.Question)
             *                              .Include(r => r.User).Where(r => r.UserId == userId)
             *                              .Select(r => new ResponseDTO
             *                              {
             *                                  ResponseId = r.SurveyResponseId,
             *                                  StudyGroupName = r.StudyGroup.StudyName,
             *                                  SurveyId = r.SurveyId,
             *                                  UserName = r.User.UserName,
             *                                  ResponseReceivedTime = r.SurveyResponseReceivedTime,
             *                                  ResponseText = r.UserResponseText,
             *                                  QuestionFrequency = ((Frequency)r.Survey.FrequencyOfNotifications).ToString(),
             *                                  QuestionText = r.Survey.Question.QuestionText,
             *                                  QuestionId = r.Survey.Question.QuestionId,
             *                                  QuestionType = r.Survey.Question.QuestionType,
             *                                  Options = r.Survey.Question.Options
             *                              });
             * return result.ToList();*/
        }
        //Get responses for a study group
        //Get responses for a study coordinator
        //Get responses for a user
        //Get responses of a survey

        // GET: api/SurveyResponses

        public IList <ResponseDTO> GetSurveyResponses()
        {
            List <ResponseDTO> responses = new List <ResponseDTO>();
            var ques = db.SurveyResponses.GroupBy(r => r.SurveyId);

            string roleName     = "StudyCoordinator";
            string respText     = "";
            var    role         = AppRoleManager.Roles.Single(r => r.Name == roleName);
            var    coordinators = db.Users.Where(u => u.Roles.Any(r => r.RoleId == role.Id)).ToList();

            foreach (var coordinator in coordinators)
            {
                var idsOfSurveysForCoordinator = from s in db.X_Coordinator_Groups

                                                 join g in db.X_Survey_Groups.Include("Survey") on s.Id equals g.StudyGroupId

                                                 where s.CoordinatorId.Equals(coordinator.Id)

                                                 select g.Id;

                foreach (var surveyId in idsOfSurveysForCoordinator.ToList())
                {
                    var responseList = from response in db.SurveyResponses.Include("Survey").Include("Question").Include("User")
                                       join question in db.Questions on response.QuestionId equals question.Id
                                       join survey in db.X_Survey_Groups.Include("Survey").Include("StudyGroup") on response.SurveyId equals survey.Id
                                       join study in db.StudyGroups on survey.StudyGroupId equals study.Id
                                       join user in db.Users on response.UserId equals user.Id
                                       where response.SurveyId == surveyId
                                       select new { response, question, survey, surveyObj = survey.Survey, study, user }
                    ;
                    var groupedResponses = responseList.GroupBy(p => p.response.SurveyId, p => new { p.response, p.question, p.survey, p.surveyObj, p.study, p.user }, (key, g) => new { SurveyId = key, Value = g.ToList() }).ToList();
                    List <QuestionResponseDTO> questions = new List <QuestionResponseDTO>();
                    foreach (var r in groupedResponses)
                    {
                        questions.Clear();
                        foreach (var p in r.Value.ToList())
                        {
                            if (p.question.QuestionType == QuestionType.Scale)
                            {
                                respText = p.response.ResponseText + " in [" + p.question.Minimum + ", " + p.question.Maximum + " ]";
                            }
                            else
                            {
                                respText = p.response.ResponseText;
                            }

                            var questionDTO = new QuestionResponseDTO
                            {
                                ResponseReceivedTime = p.response.ResponseReceivedTime,

                                ResponseText      = respText,
                                QuestionText      = p.question.QuestionText,
                                QuestionId        = p.question.Id,
                                QuestionType      = p.question.QuestionType,
                                QuestionFrequency = p.survey.FrequencyOfNotifications + "",
                                Options           = p.question.Options,
                            };
                            questions.Add(questionDTO);
                        }

                        var responseDTO = new ResponseDTO
                        {
                            SurveyId             = r.Value.ElementAt(0).response.SurveyId,
                            SurveyName           = r.Value.ElementAt(0).surveyObj.SurveyName,
                            UserName             = r.Value.ElementAt(0).user.UserName,
                            QuestionResponses    = questions,
                            StudyGroupName       = r.Value.ElementAt(0).study.StudyGroupName,
                            StudyCoordinatorName = coordinator.UserName,
                            SurveyTypeString     = ((SurveyType)r.Value.ElementAt(0).surveyObj.SurveyType).ToString()
                        };

                        responses.Add(responseDTO);
                    }
                }
            }


            /* var result = db.SurveyResponses.Include(r => r.StudyGroup)
             *                              .Include(r => r.Survey)
             *                              .Include(r => r.Survey.Question)
             *                              .Include(r => r.User)
             *                              .Select(r => new ResponseDTO
             *                              {
             *                                  StudyGroupName = r.StudyGroup.StudyName,
             *                                  SurveyId = r.SurveyId,
             *                                  UserName = r.User.UserName,
             *                                  ResponseReceivedTime = r.SurveyResponseReceivedTime,
             *                                  ResponseText = r.UserResponseText,
             *                                  QuestionFrequency = ((Frequency)r.Survey.FrequencyOfNotifications).ToString(),
             *                                  QuestionText = r.Survey.Question.QuestionText,
             *                                  QuestionId = r.Survey.Question.QuestionId,
             *                                  QuestionType = r.Survey.Question.QuestionType,
             *                                  Options = r.Survey.Question.Options,
             *                                  ResponseId = r.SurveyResponseId
             *
             *                                   // SurveyComments = r.SurveyComments
             *                               });
             * return result.ToList();*/

            return(responses);
        }
        public IList <ResponseDTO> GetResponsesForSurvey(int surveyId)
        {
            List <ResponseDTO> responses = new List <ResponseDTO>();

            var responseList = from response in db.SurveyResponses.Include("Survey").Include("Question").Include("User")
                               join question in db.Questions on response.QuestionId equals question.Id
                               join survey in db.X_Survey_Groups.Include("Survey").Include("StudyGroup") on response.SurveyId equals survey.Id
                               join study in db.StudyGroups on survey.StudyGroupId equals study.Id
                               join user in db.Users on response.UserId equals user.Id
                               where response.SurveyId == surveyId
                               select new { response, question, survey, surveyObj = survey.Survey, study, user }
            ;
            var groupedResponses = responseList.GroupBy(p => p.response.SurveyId, p => new { p.response, p.question, p.survey, p.surveyObj, p.study, p.user }, (key, g) => new { SurveyId = key, Value = g.ToList() }).ToList();
            List <QuestionResponseDTO> questions = new List <QuestionResponseDTO>();

            foreach (var r in groupedResponses)
            {
                questions.Clear();
                foreach (var p in r.Value.ToList())
                {
                    var questionDTO = new QuestionResponseDTO
                    {
                        ResponseReceivedTime = p.response.ResponseReceivedTime,
                        ResponseText         = p.response.ResponseText,
                        QuestionText         = p.question.QuestionText,
                        QuestionId           = p.question.Id,
                        QuestionType         = p.question.QuestionType,
                        QuestionFrequency    = p.survey.FrequencyOfNotifications + "",
                        Options = p.question.Options,
                    };
                    questions.Add(questionDTO);
                }

                var responseDTO = new ResponseDTO
                {
                    SurveyId          = r.Value.ElementAt(0).response.SurveyId,
                    SurveyName        = r.Value.ElementAt(0).surveyObj.SurveyName,
                    UserName          = r.Value.ElementAt(0).user.UserName,
                    QuestionResponses = questions,
                    StudyGroupName    = r.Value.ElementAt(0).study.StudyGroupName
                };

                responses.Add(responseDTO);
            }

            /*   var usersInSurvey = from u in db.X_Survey_Groups
             *                 join r in db.X_User_Groups.Include("User") on u.StudyGroupId equals r.StudyGroupId
             *                 where u.SurveyId == surveyId
             *                 select  new { r, u };
             *
             * foreach(var user in usersInSurvey.ToList())
             * {
             * var responsesForQuestionsInSurvey = db.SurveyResponses
             *                                          .Where(r => r.SurveyId == surveyId)
             *                                          .Where(r => r.UserId.Equals(user.r.UserId))
             *                                          .Include(r => r.Question)
             *                                          .Select(r => new QuestionResponseDTO
             *                                          {
             *                                              ResponseReceivedTime = r.ResponseReceivedTime,
             *                                              ResponseText = r.ResponseText,
             *                                              QuestionText = r.Question.QuestionText,
             *                                              QuestionId = r.Question.Id,
             *                                              QuestionType = r.Question.QuestionType,
             *                                              Options = r.Question.Options
             *                                          })
             *                                          .ToList();
             *
             * var responseDTO = new ResponseDTO
             * {
             *     SurveyId = user.u.SurveyId,
             *     UserName = user.r.User.UserName,
             *     QuestionResponses = responsesForQuestionsInSurvey
             * };
             *
             * responses.Add(responseDTO);
             * }*/

            return(responses);
        }