public async Task <ActionResult> Details(int?id) { if (id == null) { return(HttpNotFound()); } var survey = await _db.Survey.Include(m => m.Questions).SingleOrDefaultAsync(m => m.Id == id); if (survey == null) { return(HttpNotFound()); } var user = await _db.User.FirstOrDefaultAsync(m => m.Email == User.Identity.Name); var viewModel = new SurveyAndAnswerListViewModel() { Survey = survey, AnswerList = await _db.Answer.Where(a => a.UserId == user.Id).Join(_db.Question.Where(q => q.SurveyId == survey.Id), a => a.QuestionId, q => q.Id, (a, q) => a).ToListAsync() }; return(View(viewModel)); }
public async Task <ActionResult> Answer(int?id, SurveyAndAnswerListViewModel viewModel) { if (id == null) { return(HttpNotFound()); } // Retrieve survey with questions var survey = await _db.Survey.Include(m => m.Questions).SingleOrDefaultAsync(m => m.Id == id); if (survey == null) { return(HttpNotFound()); } // View Model validation if (!ModelState.IsValid) { // Set survey on viewModel viewModel.Survey = survey; return(View("Answering", viewModel)); } // Retrieve user from coockie var user = await _db.User.SingleOrDefaultAsync(m => m.Email == User.Identity.Name); // Redirect to login if user does not exist if (user == null) { return(RedirectToAction("Login", "Authentication", new { area = "Respondent" })); } // Redirect to Index if there are not answers if (viewModel.AnswerList == null) { return(RedirectToAction("Index")); } // Save answers to database foreach (var answer in viewModel.AnswerList) { answer.UserId = user.Id; _db.Answer.Add(answer); } TempData["StatusMessage"] = "Survey answered."; await _db.SaveChangesAsync(); return(RedirectToAction("Index")); }
public async Task <ActionResult> Details(int id, int?userId) { var survey = await _db.Survey .Include(m => m.Questions).SingleOrDefaultAsync(m => m.Id == id); if (survey == null) { return(HttpNotFound()); } if (userId != null) { // retrieve questions and answer for the survey SurveyAndAnswerListViewModel surveyAndAnswerListViewModel = new SurveyAndAnswerListViewModel() { Survey = survey, AnswerList = await _db.Answer.Where(answer => answer.UserId == userId) .Join(_db.Question.Where(m => m.SurveyId == id), a => a.QuestionId, q => q.Id, (a, q) => a) .ToListAsync() //AnswerList = await _db.Answer.Where(a=>a.Question.SurveyId==id && a.UserId==userId).Select(a=>a).ToListAsync() }; return(View("DetailsByUser", surveyAndAnswerListViewModel)); } else { // Retrive the users that has answered the survey var users = await _db.Survey.Where(m => m.Id == id) .Join(_db.Question, s => s.Id, q => q.SurveyId, (s, q) => new { QuestionId = q.Id }) .Join(_db.Answer, q => q.QuestionId, a => a.QuestionId, (q, a) => new { a.UserId }) .GroupBy(a => a.UserId) .Join(_db.User, a => a.Key, u => u.Id, (a, u) => u) .ToListAsync(); return(View(users)); } }
// GET - Answeing public async Task <ActionResult> Answering(int?id) { if (id == null) { return(HttpNotFound()); } // Retrieve survey by id and include its questions var survey = await _db.Survey.Include(m => m.Questions).SingleOrDefaultAsync(m => m.Id == id); if (survey == null) { return(HttpNotFound()); } // Create viewModel var viewModel = new SurveyAndAnswerListViewModel() { Survey = survey, }; return(View(viewModel)); }