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); }
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)); } }
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); }